修炼算法内功
Biubiuxin
紧急充电中。。。。。。
展开
-
修炼算法内功:选择排序(二)
4、随机生成算法测试用例 后面在比较不同排序算法效率的时候,可能会用到一万、十万、百万这种量级的数组,对于这种数组,不能手动生成。为此写一个新的方法生成随机数组,以及其他测试相关的辅助方法。 命名空间的使用:头文件——SortTestHelper.h命名空间——namespace+空间名+{程序块}代码块6:#ifndef INC_03_SELECTIO...原创 2018-07-28 15:39:18 · 234 阅读 · 0 评论 -
算法内功修炼——深度优先搜索(DFS)
内容:深度优先搜索简介 背包问题 剪枝1、深度优先搜索简介深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法。有明确的搜索目标; 存在到达目标的路径; 路径中存在结点,每个结点存在一个或以上的分叉口; 深度优先搜索的实现方法——递归法递归中的递归式就是那个分叉口; 递归边界就是那个目标; 2、背包问题#include<iostream>u...原创 2018-09-01 21:02:06 · 271 阅读 · 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 · 1247 阅读 · 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 · 5078 阅读 · 0 评论 -
算法内功修炼——全排列实现八皇后回溯法优化(二)
3、全排列实现八皇后回溯法优化朴素算法——暴力法 通过枚举所有情况,然后判断每一种情况是否合法的做法是非常朴素的;因此,我们把这种不使用优化,直接用朴素算法来解决问题的做法叫做暴力法。回溯法 经过思考可以发现,当已经放置了一部分皇后时(程序执行到一定时),可能剩余的皇后无论如何放置都无法满足结果,此时就没必要往下递归了,直接返回上一层即可,这样就可以为程序减少很多计算量。在...原创 2018-08-28 17:12:46 · 405 阅读 · 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 · 330 阅读 · 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 · 163 阅读 · 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 · 214 阅读 · 0 评论 -
修炼算法内功: 插入排序(一)
1、最切合实际的例子在我们生活中,常见的扑克牌就是一个很好的例子。正常人抓牌通常都是如下的几个步骤:抓取第一张排放在手中; 抓取第二张牌与第一张做比较,如果比第一张大则放在左边,反之,右边。(放在哪边是个人习惯务必较真) 抓取第三张先与第一张比较,大左小右;再与第二张比较,大左小右。 重复抓取并循环比较,直到牌抓完。(实际人类不会每次都去一次次地去比较,再去插入)2、插入排序示...原创 2018-08-02 22:10:56 · 216 阅读 · 0 评论 -
修炼算法内功:插入排序(二)
5、插入算法的改进在前面说到的插入排序算法中我们用到了比较和交换,对于完全乱序的数组,上述算法的性能是比选择排序的算法还要差很多。原因就是进行了swap()函数操作,也就是三次赋值操作。如果我们想优化算法,我们应该从那方面去优化呢?代码如下://优化后的插入排序template<typename T>void BetterInsertionSort(T arr[]...原创 2018-08-06 00:11:42 · 192 阅读 · 0 评论 -
修炼算法内功:选择排序(一)
内容:1、简单的选择排序; 2、使用模板(泛型)使算法更加灵活; 3、使用结构体完成学生的name和score属性的排序; 4、随机生成算法测试用例。写在前面:为什么学习O(n^2)的排序算法?基础编码简单,易于实现,是一些简单场景的首选 在一些特殊情况下,,简单的排序算法更有效 简单的排序算法思想可衍生出复杂...原创 2018-07-22 17:53:28 · 699 阅读 · 0 评论