面试题的思考之找到最大和最小的数

一,一种好的方案是:

先把数组两两分组,这样分成(N/2)组,然后,每组两个数比一次,然后记录两个变量,最小和最大,依次按照组,往后遍历。这样每组(除了第一组)之外,都是比较三次(组内一次,小的跟当前最小的比,大的跟当前最大的比)。这样一共就是O(N*1.5)的时间复杂度。

二,分析:

我一开始认为,这样搞的原因是因为,这样搞消除了“获取冗余信息”的能力。就是说,“一个一个去跟最大最小的比,这样搞会得知额外信息,所以这样搞是O(2N)”。

但是这样认为是错的,用信息论的概念算了一下,我发现【一个一个跟最大最小的比】和【分成两个一组,组内比,然后分别与最大最小比】这两种方案,其实它们消除不确定度的能力是一样的,也就是说,【一个一个去跟最大最小的比,这样搞会得知额外冗余信息,这种想法是错误的】。

三,结论:

原因就是因为,时间复杂度的定义:最差情况。这个前提。平均情况下,这两种需要比较的次数相等。但是最差情况下,一个一个比,就会让【每一次比较】消除很小的不确定度。但是,无论何种情况下,【分组比较法】的【每一次比较】都会消除同样的不确定度。

实际上就是说,当最差极端情况出现时,这两种哪个更稳定的问题。

其实,也有可能,【一个一个比】次数更少,那就是出现最佳极端情况。

 

posted on 2015-09-24 02:38  一页天书不分说 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/onebook/p/4834073.html

### HTML 网页代码实现过年烟花效果 为了创建具有春节氛围的烟花效果,可以采用HTML5 `Canvas` 和 JavaScript 结合的方式。下面是一个简单版本的烟花爆炸动画示例: #### 完整HTML文件结构如下所示: ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>新年快乐 - 烟花秀</title> <style> body { margin: 0; overflow:hidden;background-color:#000;} canvas { display:block } </style> </head> <body> <canvas id="fireworks"></canvas> <script> class Particle { constructor(x, y) { this.x = x; this.y = y; this.color = 'hsl(' + Math.random() * 360 + ', 100%, 70%)'; this.size = Math.random() * 4 + 1; this.speedX = (Math.random() - .5) * 10; this.speedY = (Math.random() - .5) * 10; this.alpha = 1; } update(ctx) { ctx.globalAlpha = this.alpha -= 0.01; ctx.fillStyle = this.color; ctx.beginPath(); ctx.arc(this.x += this.speedX, this.y += this.speedY, this.size, 0, Math.PI * 2); ctx.fill(); if (this.alpha <= 0) particles.splice(particles.indexOf(this), 1); } } let canvas = document.getElementById('fireworks'); let context = canvas.getContext('2d'); canvas.width = window.innerWidth; canvas.height = window.innerHeight; window.addEventListener('resize', function () { canvas.width = window.innerWidth; canvas.height = window.innerHeight; }); function createFirework(event) { let mouseX = event.clientX || event.touches[0].clientX; let mouseY = event.clientY || event.touches[0].clientY; for (var i = 0; i < 100; i++) { particles.push(new Particle(mouseX, mouseY)); } } document.body.addEventListener('click', createFirework); let particles = []; function animate() { requestAnimationFrame(animate); context.clearRect(0, 0, innerWidth, innerHeight); for (let particle of particles) { particle.update(context); } } animate(); </script> </body> </html> ``` 此段脚本定义了一个名为Particle的对象来表示单个火花粒子,并设置了其属性如位置、颜色、大小以及速度等[^1]。 页面加载完成后会监听窗口尺寸变化事件以便调整画布大小适应不同设备屏幕;同时绑定了鼠标点击事件,在用户点击处生成一组随机分布的小颗粒模拟烟花的过程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值