![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Leonardo Liu
这个作者很懒,什么都没留下…
展开
-
算法基础:递归(基于Python)
本博客所有内容均整理自《算法图解》,欢迎讨论交流~相信大家对递归这个名词都不陌生,递归是一种非常优雅的编程思路和问题解决方法。具体来说,程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在各种程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少...原创 2019-02-21 21:17:41 · 464 阅读 · 1 评论 -
算法基础:散列表(基于Python)
本博客所有内容均整理自《算法图解》,欢迎讨论交流~想必大家都熟知最基本的两个数据结构:数组和链表,在此二者的基础上,延伸出了两种比较高级的数据结构:栈和队列。其实还有一种很有用的基本数据结构,那就是散列表。1、散列表的基本概念散列表也成为哈希表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映...原创 2019-02-26 22:35:13 · 467 阅读 · 0 评论 -
算法基础:动态规划
本博客所有内容均整理自《算法图解》,欢迎讨论交流~动态规划是一种很优雅的算法,它可以认为是使用了分治法的思想,即将大问题划分成小问题,逐一击破这些小问题,从而总体上解决大问题。对于动态规划的定义,百度百科是这样给出的:动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E....原创 2019-03-05 22:29:07 · 782 阅读 · 1 评论 -
算法基础:NP完全问题
本博客所有内容均整理自《算法图解》,欢迎讨论交流~相信稍微做过一点学术研究的都不会对“NP完全问题”这个概念感到陌生。它是千禧难题之首。对于NP完全问题的定义,百度百科是这样给出的:NP完全问题(NP-C问题),是世界七大数学难题之一。 NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就在这个问号...原创 2019-03-05 16:57:37 · 48824 阅读 · 0 评论 -
算法基础:选择排序(基于Python)
本博客所有内容均整理自《算法图解》,欢迎讨论交流~选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。举个例子,我有以下8个数字,要从小到大进行排序:33, 12, ...原创 2019-02-20 19:57:30 · 180 阅读 · 0 评论 -
算法基础:大O表示法
本博客所有内容均整理自《算法图解》,欢迎讨论交流~大家学习算法时不可避免地会遇见大O表示法,一般书上会解释说这个表示法是用来表示算法复杂度的,但是具体这个表示法是什么意思呢?又怎么比较不同的大O表示数值之间的关系呢?其实大O表示法指出了算法有多快。例如,假设列表包含n个元素,简单查找需要检查每个元素,因此需要执行n次操作,使用大O表示法,这个运行时间为O(n),单位呢?没有——大O表示法并...原创 2019-02-20 18:57:56 · 874 阅读 · 0 评论 -
算法基础:二分查找 (基于Python)
本博客所有内容均整理自《算法图解》,欢迎讨论交流~二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。如果要查找的元素包含在输入的元素列表内,则返回其位置。具体来说,以报数为例子,假设随便想一个1~100的数字,如65,让你来猜,二分查找的思想就是每次都猜最中间的那个数字。所以第一次你猜...原创 2019-02-20 18:37:49 · 749 阅读 · 0 评论 -
算法基础:狄克斯特拉算法(基于Python)
本博客所有内容均整理自《算法图解》,欢迎讨论交流~之前在引入图算法和广度优先搜索的时候,我举了一个旅行最短距离的例子,其实在那一节,广度优先搜索并没有解决那个例子的问题,在这里使用狄克斯特拉算法才可以真正解决赋权图的最短距离问题。我们依然沿用那个例子。假设你要从北京到成都去旅游,但是已经买不到北京直达成都的火车票或者飞机票了,于是你决定中转。现在有以下几种中转方案:1、北京-乌鲁木...原创 2019-03-01 21:02:37 · 489 阅读 · 0 评论 -
算法基础:贪婪算法(基于Python)
本博客所有内容均整理自《算法图解》,欢迎讨论交流~相信大家都或多或少地听说或者接触过贪婪算法,当我们遇到一个没有办法解决的问题时,贪婪算法总是一个现成的好思路。对于贪婪算法的定义,百度百科是这样说的:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。其实说白了,就是在当前状态下找到局...原创 2019-03-04 22:46:51 · 2848 阅读 · 0 评论 -
算法基础:图算法和广度优先搜索(基于Python)
本博客所有内容均整理自《算法图解》,欢迎讨论交流~谈到图算法和广度优先搜索,我认为首先要明白这两种算法是用来干嘛的。在这里我引用《算法图解》一书举的一个很经典的例子来讲解。很多时候我们希望能够找出两样东西之间的最短距离,这里的距离不是单单是相距多少米,有很多含义。我们来看看以下几个问题:编写国际跳棋AI,计算最少走多少步就可获胜; 编写拼写检查器,计算最少编辑多少个地方就可将错拼的单...原创 2019-02-27 22:30:39 · 4345 阅读 · 2 评论 -
算法基础:快速排序(基于Python)
本博客所有内容均整理自《算法图解》,欢迎讨论交流~快速排序是一种常用的排序算法,比选择排序快很多。C语言标准库中的函数qsort实现的就是快速排序。快速排序非常实用,它使用了递归和分治法的思想。具体来说,快速排序的思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,...原创 2019-02-22 17:32:34 · 237 阅读 · 0 评论 -
算法基础:分治法(基于Python)
本博客所有内容均整理自《算法图解》,欢迎讨论交流~有时候,你可能会遇到使用任何已知的算法都无法解决的问题,这种时候,我们就可以试试分治法的思路。分治法的基本思想很简单,顾名思义,就是将一个大问题分解为若干个子问题,然后我们逐一地解决这些子问题,将所有子问题解决完毕,也就将整体的大问题解决完毕了。分治法的精髓:分--将问题分解为规模更小的子问题;治--将这些规模更小的子问题逐个击...原创 2019-02-21 21:49:16 · 2913 阅读 · 3 评论 -
算法基础:k最近邻算法
本博客所有内容均整理自《算法图解》,欢迎讨论交流~了解过机器学习这个概念,一定知道有一种名为k最近邻的算法,简称KNN。对于k最近邻算法的定义,百度百科是这样给出的:K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类...原创 2019-03-06 21:21:40 · 1815 阅读 · 1 评论