程序员必看视频之-基于原则的发明( 四 )


因此 , 现在我需要将索引放在数组的中间 , 因此我将取这两个的平均值 。 中值等于两个之上的低点和高点 , 并且……嗯 , 这显然是不对的 。 2.5不是有效的数组索引 。 所以我想我需要四舍五入 。 所以我要添加floor函数并将其四舍五入 。 而且 , 我在键入错误的第二个地方就发现了该错误 , 而不是在二十个单元测试中编写了整个函数 。 因此 , 现在我从数组中获取了值……然后我需要细分范围 , 因此有一个if语句 , 我将其粘贴到此处 。 因此 , 在这种情况下 , 我找到的值小于键 , 因此它采用了if语句的第一个分支 。 这是在调整下限 。 当然 , 如果键较小 , 则它将采用if语句的此分支并调整上限 。 或者 , 如果键是“ c” , 那么我们将刚好在第一帧找到它 , 然后返回索引 。
因此 , 这是该算法的第一次迭代 。 现在我们需要做的是循环 。 我们已经细分了数组 , 我们需要继续细分 , 直到我们只寻找所需的内容 。 因此 , 我们需要循环;我会循环 。 而1 , 做所有这些 。 现在 , 我们有三列对应于此循环的三个迭代 。 因此 , 这里的第一列正是您之前所看到的 。 高低跨度整个数组 , 我们发现一个'c' , 它太低了 , 所以我们调整了下界 , 然后循环到这里 。 第二次迭代 , 边界更紧密;我们找到一个“ e” 。 调整上限 。 第三次迭代 , 循环到此处;低和高相同 。 我们将其范围缩小到了一个候选对象–这确实是我们正在寻找的关键 , 我们返回了该索引 。 因此 , 这里没有任何隐藏的东西 。 您会确切地看到算法在每个点上都在做什么 。 我可以转到这里尝试不同的键 , 这样我就可以了解算法在这些不同输入参数下的行为 。
通过查看这些数据 , 我可以对这种算法的工作原理有一个直观的认识 。 因此 , 我在这里尝试使用其他键 , 并说我尝试查找“ g” 。 这看起来有些不同 。 它实际上并没有返回 。 这样做的原因是 , 我正在寻找实际上不在数组中的键 。 打破此循环的唯一方法是找到密钥 。 所以它一直停留在这里 , 永远循环 。 因此 , 我们可以看一下这一点 , 看看出了什么问题 , 算法出了什么问题 。 前几个迭代看起来不错 , 但是这个迭代看起来很奇怪 , 因为低大于高 。 我们的范围已完全崩溃 。 因此 , 如果到了这一点 , 那么我们知道找不到密钥 。 所以我看到了这种错误的情况 , 然后我说:“哦 , 那不对 。 低必须小于或等于高 。 ”好的 , 我将其作为while语句的条件 。 低 , 小于等于高 , 然后就会跳出循环 , 我将返回一些信号说找不到它 。 因此 , 在这里 , 我们进行了三个循环迭代 , 找不到了 , 我们返回了一个未找到的值 。 这就是编写没有蒙上眼睛的算法的样子 。
因此 , 我再次有了这个原则 , 即创作者需要能够看到他们在做什么 。 他们需要与他们正在建立的这种直接联系 。 我试图通过三个编码示例来展示该原理 , 但这仅仅是因为这是一次软件工程会议 , 所以我认为我应该谈论编程 。 但是对我来说 , 这个原理与编程无关 。 它与任何类型的创作有关 。 因此 , 我想向你展示更多的演示 , 只是为了向你展示我在此构想的广度 。
程序员必看视频之-基于原则的发明文章插图
因此 , 首先让我们看一下工程的另一个分支 。 所以在这里 , 我有一个电子电路 。 我还没有完成绘制 , 所以让我结束 。 我们放2 。 现在我们有了工作电路 。 我的意思是我认为这是一个正常的电路 。 我实际上看不到这里有什么工作 。 因此 , 这与编写代码完全相同 , 我们以静态表示形式工作 。 但是我们真正关心的是数据 。 变量的值 , 所以我们在这里看不到 。 现在 , 在电路中 , 变量是这些不同导线上的电压 。 因此 , 每条导线的电压都会随着时间而变化 , 我们必须能够看到这一点 。 现在 , 如果我要在实验室工作台上构建该电路 , 然后进行物理构建 , 则至少可以拿一个示波器并在附近戳一下 , 看看不同导线中发生了什么 , 这里或这里发生了什么 。 因此 , 至少 , 我应该能够做到这一点 。 所以我在这里得到的是该导线上的电压随时间变化的曲线图 。 您会看到它的高 , 低 , 高和低 , 因此这很明显在振荡 。 如果以物理方式构建它 , 那么我也将能够看到电路在做什么 。 在这种情况下 , 我在这里有两个LED 。 这些是LED的小灯 , 大概是有原因的 。 我可以打Play , 然后观看它实时模拟 。 现在 , 您可以看到电路的功能 。