
算法
ai-exception
Github: https://github.com/DmrfCoder;
Gmail: xuefanggang97@gmail.com;
QQ:2296452542
展开
-
八大常见排序算法介绍
直接插入排序算法思想首先将第二个数与第一个数进行对比,如果第二个数比第一个数小,则将第二个数插入到第一个数之前,这样保证前两个数是有序的; 接下来将第三个数与前两个数对比,发现有比第三个数大的数即将第三个数插入到对应数的前面,这样一次插入可保证前三个数是有序的; 以此类推,将后面的i个数分别其前面的i-1个数进行对比,并将其插入到第一个比其大的数前面,最后即可完成排序。时间原创 2018-01-13 21:26:07 · 270 阅读 · 0 评论 -
堆和不相交集数据机构——堆
堆在很多情况下我们需要使用一种具有插入元素和查找最大值元素的数据结构,这种数据结构叫做优先队列,如果采用普通队列,那么寻找最大元素需要搜索整个队列,开销比较大;如果使用排序数组,插入运算就需要移动很多的元素,开销也会比较大。这时候堆就是一种有效的实现优先队列的数据结构。堆的特点:父节点大于等于子节点(但是两个子节点之间的大小关系没有要求),这样可以做到沿着每条从根节点到叶子节点的路径...原创 2018-04-29 10:37:08 · 314 阅读 · 0 评论 -
算法复杂度分析中的符号(Θ、Ο、ο、Ω、ω)简介
Θ,读音:theta、西塔;既是上界也是下界(tight),等于的意思。Ο,读音:big-oh、欧米可荣(大写);表示上界(tightness unknown),小于等于的意思。ο,读音:small-oh、欧米可荣(小写);表示上界(not tight),小于的意思。Ω,读音:big ome...转载 2018-04-29 10:44:21 · 2913 阅读 · 0 评论 -
归纳法
只调用一次的递归叫做尾递归基数排序算法思想基数排序需要经历d次,d为所要排序数列中位数最多的数的位数,其过程是首先根据数列中数的个位的数值将所有数入0~9这10个队列,然后从0~9将元素依次出队,然后再根据十位元素的数值再次入队,然后出队,以此类推重复d次,最终即可完成排序。时间空间复杂度及稳定性T(n)=O(d*n) d为排序数中最大数的位数S(n)=O(n)...原创 2018-04-29 15:16:51 · 763 阅读 · 0 评论 -
回溯算法
概述回溯算法是一种组织搜索的一般技术,它常常可以避免搜索所有的可能性,适用于求解那些有潜在的大量解但是有限个数的解已经检查过的问题。3着色问题问题描述给出一个无向图G=(V,E),需要用三种颜色之一为V中的每个顶点着色,要求没有两个相邻的顶点有相同的颜色。算法思想我们称没有两个邻接顶点有同样颜色的着色方案为合法的,反之成为非法的。如果不考虑合法性的要求,给出n个...原创 2018-05-07 17:19:42 · 4880 阅读 · 1 评论 -
动态规划
什么是动态规划基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。动态规划是一种被广泛用于求解组合最优化问题的算法。算法思想算法思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息...原创 2018-05-07 21:13:43 · 521 阅读 · 0 评论 -
贪心算法
引言所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。 所以对所采用的贪心策略一定要仔细分析其...原创 2018-05-08 20:25:41 · 4937 阅读 · 0 评论 -
算法分析基本概念
二分搜索Linearsearch/* * 输入:n个元素的数组A[1...n]、x * 输出:如果x=A[j]&&1<=j<=n,则输出j,否则输出0 */int Linearsearch(int *A,int x, int n){ int j=0; while (j<n&&x!=A[j]){ ...原创 2018-05-14 19:30:31 · 1122 阅读 · 0 评论 -
NP完全问题
如果一个算法的最差时间效率属于 O ( p ( n )) ,其中 p (n ) 是问题输入规模 n 的一个多项式函数,我们说该算法能够在多项式的时间内对问题求解。 我们把可以在多项式时间内求解的问题称为易解的,而不能在多项式时间内求解的问题则称为难解的。非正式地说,我们可以把那些能够在多项式时间内求解的问题当作计算机科学家所说的* P 集合*。 正式点,只有那些能够回答是或否的问题(又称判...原创 2018-05-14 20:07:21 · 5868 阅读 · 1 评论 -
随机算法
概述随机算法是一种在接受输入的同时,为了随机选择的目的,还接受一串随机比特流并且在运行过程中使用该比特流的算法(允许算法在执行过程中随机地选择下一个计算步骤)。随机算法通常有两个优点:较之那些我们所知的解决同一问题最好的确定性算法,随机算法所需的运行时间或空间通常小一些。随机算法比较易于理解和实现(呵,站着说话不腰疼)。随机算法的基本特征:对所求解问题的同一实例用同一随机算法...原创 2018-05-17 08:35:26 · 9277 阅读 · 0 评论 -
Algorithm summary
一:算法分析基本概念二分搜索Linearsearch/* * 输入:n个元素的数组A[1...n]、x * 输出:如果x=A[j]&amp;amp;amp;amp;&amp;amp;amp;amp;1&amp;amp;amp;lt;=j&amp;amp;amp;lt;=n,则输出j,否则输出0 */int Linearsearch(int *A,int x, int n){ int j=0; whi原创 2018-05-22 22:49:00 · 4689 阅读 · 2 评论 -
分治算法
什么是分治一个分治算法把问题实例划分为若干个子问题(一般是两个),并分别使用递归解决每个子实例,然后把这些子实例的解组合起来,得到原问题的解。举个栗子考虑这样一个问题:我们需要在序列A[1….n]中找到该序列的最大值元素和最小值元素,一种直接的算法是扫描一遍A序列,用两个标志位max和min分别表示最大值和最小值元素,然后扫描时根据每个元素与当前最大最小值的比较情况动态调整最大最小...原创 2018-04-30 16:45:40 · 8225 阅读 · 0 评论 -
两种不同方式解决八皇后问题
八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。原创 2017-11-20 19:28:57 · 844 阅读 · 0 评论