随笔分类 -  算法入门

摘要:一、用途 广度优先算法是为了解决两样东西之间的最短距离,其中最短距离的含义很多,如: 编写国际跳棋AI,计算最少走多少步就可获胜 编写拼写检查器, 计算最少编辑多少个地方就可将错拼的单词改成正确的单词 根据你的人际关系网络找到关系最近的医生 二、图 图由节点和边组成,模拟一组链接。 三、广度优先搜索 阅读全文
posted @ 2019-03-06 23:14 梁少华 阅读(6013) 评论(1) 推荐(1)
摘要:1. 散列函数 散列函数就是将输入映射到数字。它必须满足两个条件: 如下图所示: 散列函数可以准确的指出价格的存储位置,具体原因如下: 散列函数总是将同样的输入映射到相同的索引。也就是说apple永远在第四个格子上 散列函数将不同的输入映射到不同的索引。apple的索引为3,milk的索引为0 散列 阅读全文
posted @ 2019-03-03 13:24 梁少华 阅读(932) 评论(0) 推荐(0)
摘要:快速排序比选择排序要快得多,采用分而治之的思想,具体实现是用递归。 1. 基线条件 数组为空或只包含一个元素 2. 递归条件 将数组分解,直到满足基线条件 3. 工作原理 4. 代码实现 5. 合并排序和选择排序 这里要说一下合并排序,运行时间为O(n log n)。而快速排序在最糟糕的情况下的运行 阅读全文
posted @ 2019-02-28 14:07 梁少华 阅读(1428) 评论(0) 推荐(0)
摘要:谓“分而治之” 就是把一个复杂的算法问题按一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的解,把各部分的解组成整个问题的解。注意分而治之不是算法,而是一种解决问题的思路 工作原理 1) 找出简单的基线条件; (2) 确定如何缩小问题的规模,使其符合基线条件。 例子 假设 阅读全文
posted @ 2019-02-27 22:28 梁少华 阅读(965) 评论(0) 推荐(0)
摘要:递归就是不断调用自己,让解决方案更清晰,但是没有性能上的优势。使用情景参考Stack Overflow的一个答案:“如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。” 基线条件和递归条件 每个递归函数都有两部分:基线条件 (base case)和递 阅读全文
posted @ 2019-02-26 13:38 梁少华 阅读(1370) 评论(0) 推荐(0)
摘要:1. 数组(array) 数组在内存中的储存方式是连在一起的。 优点 由于数组中的所有元素是连在一起的,所以查找任何元素都很方便。需要注意是第一个元素是从0开始数,也就是如果你想读取第10个元素,只需要输入索引9就可以了。 缺点 数组在内存中是必须连在一起的,这就造成了一个问题。如果在内存给一个数组 阅读全文
posted @ 2019-02-24 22:40 梁少华 阅读(446) 评论(0) 推荐(0)
摘要:什么是大O表示法 大O表示法可以告诉我们算法的快慢。 大O比较的是操作数,它指出了算法运行时间的增速。 O(n) 括号里的是操作数。 举例 画一个16个格子的网格,下面分别列举几种不同的画法,并用大O表示法表示 1. 一次画一个格子。O(n) 2. 折叠纸张,折叠四次就能出现16个格子。O(log 阅读全文
posted @ 2019-02-24 22:34 梁少华 阅读(3514) 评论(0) 推荐(1)
摘要:2分查找必须得是一个有序的元素列表。如果要找的元素在列表内,则返回该元素的位置。否则,返回null。 代码 阅读全文
posted @ 2019-02-24 22:31 梁少华 阅读(343) 评论(0) 推荐(0)