算法图解

二分查找

二分查找----是一种算法,其输入是一个有序的元素列表(必须有序的原因稍后解释)。如果要 查找的元素包含在列表中,二分查找返回其位置;否则返回null。

大O表示法

大O表示法----是一种特殊的表示法,指出了算法的速度有多快。
大O表示法----让你能够比较操作数,它指出了算法运行时间的增速。 
下面按从快到慢的顺序列出了你经常会遇到的5种大O运行时间。 
1、 O(log n),也叫对数时间,这样的算法包括二分查找。
2、 O(n),也叫线性时间,这样的算法包括简单查找。 
3、 O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
4、 O(n2),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
5、 O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案 ——一种非常慢的算法。 

链表

链表中的元素可存储在内存的任何地方。 
链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。 
链表只支持能顺序访问:要读取链表的第十个元素,得先读取前九个元素,并沿链接找到第十个元素。
链表的元素是分开的,其中每个元素都存储了下一个元素的地址。
链表的插入和删除速度很快。 

基线条件和递归条件

递归条件指的是函数调用自己;而基线条件则 指的是函数不再调用自己,从而避免形成无限循环。 

堆与栈

堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 
队列是先进先出(FIFO)的。 
栈是后进先出(LIFO)的。 

散列表

结合使用散列函数和数组创建了一种被称为散列表(hash table)的数据结构,它使用散列函数来确定元素的存储位置。 
缓存是一种常用的加速方式,所有大型网站都使用缓存,而缓存的数据则存储在散列表中。

广度优先搜索

广度优先搜索是一种用于图的查找算法,可帮助回答两类问题。 
1、 第一类问题:从节点A出发,有前往节点B的路径吗?
2、第二类问题:从节点A出发,前往节点B的哪条路径最短?
广度优先搜索让你能够找出两样东西之间的最短距离,不过最短距离的含义有很多!目前广度优先搜索的应用: 
1、编写国际跳棋AI,计算最少走多少步就可获胜; 
2、编写拼写检查器,计算最少编辑多少个地方就可将错拼的单词改成正确的单词,如将 READED改为READER需要编辑一个地方;
3、根据你的人际关系网络找到关系最近的医生。

狄克斯特拉算法

狄克斯特拉算法用于在加权图中查找最短路径。 
当权重为正时狄克斯特拉算法才管用。 

贪婪算法

每步都采取最优的做法。
当权重为正时狄克斯特拉算法才管用。 
贪婪算法的运行时间为O(n2)。
贪婪算法寻找局部最优解,企图以这种方式获得全局最优解。 
贪婪算法易于实现、运行速度快,是不错的近似算法。

猜你喜欢

转载自blog.csdn.net/wfh684066/article/details/80932941