修炼算法内功
Biubiuxin
紧急充电中。。。。。。
展开
-
修炼算法内功:选择排序(二)
4、随机生成算法测试用例 后面在比较不同排序算法效率的时候,可能会用到一万、十万、百万这种量级的数组,对于这种数组,不能手动生成。为此写一个新的方法生成随机数组,以及其他测试相关的辅助方法。 命名空间的使用: 头文件——SortTestHelper.h 命名空间——namespace+空间名+{程序块} 代码块6: #ifndef INC_03_SELECTIO...原创 2018-07-28 15:39:18 · 240 阅读 · 0 评论 -
算法内功修炼——深度优先搜索(DFS)
内容: 深度优先搜索简介 背包问题 剪枝 1、深度优先搜索简介 深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法。 有明确的搜索目标; 存在到达目标的路径; 路径中存在结点,每个结点存在一个或以上的分叉口; 深度优先搜索的实现方法——递归法 递归中的递归式就是那个分叉口; 递归边界就是那个目标; 2、背包问题 #include<iostream> u...原创 2018-09-01 21:02:06 · 280 阅读 · 0 评论 -
修炼算法内功——two pointers
内容: two pointers简介 a+b=M 序列合并问题 归并排序 快速排序 1、two pointers简介 two pointers是算法编程中一种非常重要的思想,它更倾向于一种编程技巧,为我们编程提供了非常高的算法效率。 2、a+b=M 以一个例子引入:给定一个递增的正整数序列和一个正整数M,求序列中的两个不同位置的数a和b,使得他们的和恰好为M,输出所有满足条件的方...原创 2018-08-31 20:48:18 · 1259 阅读 · 1 评论 -
算法内功修炼——八皇后中对角线判断问题(三)
第一种 当前元素和之前已插入号的皇后的行列之差的绝对值相等。 abs(index-pre)==abs(x-p[pre]) 第二种的简易写法,往下看。。。 第二种 直接判断法 if( p[index]==p[pre] || index-p[index]==pre-p[pre] || index+p[index]==pre+p[pre]) p[index==p[pre]]用来判断是否在同...原创 2018-08-28 21:35:13 · 5189 阅读 · 0 评论 -
算法内功修炼——全排列实现八皇后回溯法优化(二)
3、全排列实现八皇后回溯法优化 朴素算法——暴力法 通过枚举所有情况,然后判断每一种情况是否合法的做法是非常朴素的;因此,我们把这种不使用优化,直接用朴素算法来解决问题的做法叫做暴力法。 回溯法 经过思考可以发现,当已经放置了一部分皇后时(程序执行到一定时),可能剩余的皇后无论如何放置都无法满足结果,此时就没必要往下递归了,直接返回上一层即可,这样就可以为程序减少很多计算量。 在...原创 2018-08-28 17:12:46 · 427 阅读 · 0 评论 -
算法内功修炼——全排列与实现八皇后(一)
内容: 全排列实现 结合全排列实现八皇后 全排列实现八皇后回溯法优化 八皇后中对角线判断问题 1、全排列实现 输出一个1~n的全排列。如:1到3,123,132,213,231,312,321 算法描述: 设置一个数组p[maxn],用来存放全排列数字; 设置一个数组hashTable[maxn]用来标记元素是否已经被存入p[]中,类型为bool,返回值为true和false; ...原创 2018-08-27 20:49:28 · 339 阅读 · 0 评论 -
修炼算法内功 归并排序(二)
3、归并排序算法的优化 优化方案一 template<typename T> void mergeSort(T arr[],int first,int last) { if (first >= last)//递归到底就结束 return; int mid = (last + first) / 2;//取中间数,并向下取整 //...原创 2018-08-16 13:14:24 · 165 阅读 · 0 评论 -
修炼算法内功 归并排序(一)
内容: 归并排序算法思想 归并排序算法的实现 归并排序算法的优化 1、归并排序算法思想 对于给定的一串数组如:5、3、7、2、6、4、8、1 我们可以进行如下几个步骤: 将数组从中间分成两组数组——>5、3、7、2和6、4、8、1分别排序; 同样,我们可以继续拆分这两个数组为5、3和7、2以及6、4和8、1分别排序; 我们将想要排序的数组拆分再排序,就会形成循环,直到不能拆分...原创 2018-08-15 21:53:45 · 222 阅读 · 0 评论 -
修炼算法内功: 插入排序(一)
1、最切合实际的例子 在我们生活中,常见的扑克牌就是一个很好的例子。正常人抓牌通常都是如下的几个步骤: 抓取第一张排放在手中; 抓取第二张牌与第一张做比较,如果比第一张大则放在左边,反之,右边。(放在哪边是个人习惯务必较真) 抓取第三张先与第一张比较,大左小右;再与第二张比较,大左小右。 重复抓取并循环比较,直到牌抓完。(实际人类不会每次都去一次次地去比较,再去插入) 2、插入排序 示...原创 2018-08-02 22:10:56 · 226 阅读 · 0 评论 -
修炼算法内功:插入排序(二)
5、插入算法的改进 在前面说到的插入排序算法中我们用到了比较和交换,对于完全乱序的数组,上述算法的性能是比选择排序的算法还要差很多。原因就是进行了swap()函数操作,也就是三次赋值操作。 如果我们想优化算法,我们应该从那方面去优化呢? 代码如下: //优化后的插入排序 template<typename T> void BetterInsertionSort(T arr[]...原创 2018-08-06 00:11:42 · 198 阅读 · 0 评论 -
修炼算法内功:选择排序(一)
内容:1、简单的选择排序; 2、使用模板(泛型)使算法更加灵活; 3、使用结构体完成学生的name和score属性的排序; 4、随机生成算法测试用例。 写在前面:为什么学习O(n^2)的排序算法? 基础 编码简单,易于实现,是一些简单场景的首选 在一些特殊情况下,,简单的排序算法更有效 简单的排序算法思想可衍生出复杂...原创 2018-07-22 17:53:28 · 714 阅读 · 0 评论