自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 八大排序算法2:冒泡排序

1.原理介绍 冒泡排序在扫描过程中两两比较相邻记录,如果反序则交换,最终,最大记录就被“沉到”了序列的最后一个位置,第二遍扫描将第二大记录“沉到”了倒数第二个位置,重复上述操作,直到n-1 遍扫描后,整个序列就排好序了。 稳定的排序算法(如果a原本在b的前面,而a=b,排序之后a依然在b的前面),平均时间复杂度为O(n*n) ,最好时间复杂度为 O(n),最坏时间复...

2019-07-21 16:20:52 148

原创 八大排序算法1:快速排序

1.原理介绍 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数,为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列:3 1 2 5 4 6 9 7 10 8,递归对左右两个区间进行同样排序...

2019-07-21 16:18:35 152

原创 二叉树遍历3:二叉树中序遍历

vector<int> inorderTraversal(TreeNode* root) //非递归{ vector<int>res; stack<TreeNode*>node; TreeNode *head=root; while(!node.empty()||root!=NULL)...

2019-07-21 16:17:24 109

原创 二叉树遍历2:二叉树前序遍历

vector<int> preorderTraversal(TreeNode* root){ stack<TreeNode*> toVisit; vector<int> result; if(root == NULL) return result; TreeNo...

2019-07-21 16:17:09 101

原创 二叉树遍历1:二叉树层序遍历

vector<vector<int>> levelOrder(TreeNode* root){ vector<vector<int>>res; if(!root) return res; TreeNode *node = root; queue&lt...

2019-07-21 16:16:57 234

原创 字符串匹配4:Sunday算法

1. 刚开始时,把模式串与文本串左边对齐:substring searching algorithmsearch^2. 结果发现在第2个字符处发现不匹配,不匹配时关注文本串中参加匹配的最末位字符的下一位字符,即标粗的字符 i,因为模式串search中并不存在i,所以模式串直接跳过一大片,向右移动位数 = 匹配串长度 + 1 = 6 + 1 = 7,从 i 之后的那个字符(即字符n)...

2019-07-21 16:16:42 78

原创 字符串匹配3:BM算法

KMP的匹配是从模式串的开头开始匹配的,BM算法从模式串的尾部开始匹配,且拥有在最坏情况下O(N)的时间复杂度。在实践中,比KMP算法的实际效能高。给定文本串“HERE IS A SIMPLE EXAMPLE”,和模式串“EXAMPLE”。BM算法定义了两个规则:坏字符规则:当文本串中的某个字符跟模式串的某个字符不匹配时,我们称文本串中的这个失配字符为坏字符,此时模式串需要向右移动,移动的位数...

2019-07-21 16:16:32 406

原创 字符串匹配2:KMP算法

1.原理介绍假设现在文本串S匹配到i位置,模式串P匹配到j位置。如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++,继续匹配下一个字符;如果j != -1,且当前字符匹配失败(即S[i]!=P[j]),则令i不变,j=next[j]。此举意味着失配时,模式串P相对于文本串S向右移动了j-next[j]位。换言之,当匹配失败时,模式串向右移动的位数为:失配字...

2019-07-21 16:15:45 75

原创 字符串匹配1:暴力法

1.原理简介如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i回溯,j被置为0。2.代码实现int ViolentMatch(char* s, char* p){ int sLen = strlen(s),pLen = ...

2019-07-21 16:15:30 165

原创 汉诺塔问题

void move(int n, char a, char b, char c){ if (n > 0) { move(n - 1, a, c, b); cout << a << " " << n << " " << c <&l...

2019-07-21 16:15:00 120

原创 N皇后问题

vector<vector<string>> solveNQueens(int n){ vector<string> re(n,string(n,'.')); vector<vector<string>> temp; get(temp,re,n,0); retur...

2019-07-20 09:27:02 119

原创 八皇后问题

1.递归法int a[8], b[15], c[15], x[8];void print(){ int i; for (i = 0; i <= 7; i++) cout << "(" << i << "," << x[i] << ")"; co...

2019-07-20 09:25:56 80

原创 查找算法7:树表查找

(1)二叉树查找算法(二叉搜索树/二叉排序树):二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。 这个算法的查找效率很高,但是如果使用这种查找方法要首先创建树。插入和查找的时间复杂度均为O(logn) ,但是在最坏的情况下仍然会有O(n)的时间复杂度。(2)平衡查找树之2-3查找树:允许每个节点保存1...

2019-07-20 09:23:28 403

原创 查找算法6:斐波那锲查找(黄金分割法查找)

1.原理介绍斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数F[n],将原查找表扩展为长度为F[n](如果要补充元素,则补充重复最后一个元素,直到满足F[n]个元素),完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,找出要查找的元素在那一部分并递归,直到找到。数组a的长度其实很...

2019-07-20 09:21:55 261

原创 查找算法5:插值查找(按比例查找)

1.原理介绍 折半查找法中,每次都是对折之后再查找,但是实际上是可以不进行对折查找。比如说,我们在英语字典中查找某一个英语单词,首先会翻到这个单词的首字母的位置再进行查找,这种查找方式就叫做按比例查找。前提是均匀的一组有序数,这样比例才明显。它的基本思想就是,根据关键字在数组中的位置来确定mid的位置。查找成功或者失败的时间复杂度均为:O(loglogn)假如low=1,h...

2019-07-20 09:19:17 316

原创 查找算法四:二分查找(折半查找)

1.原理简介要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。最坏情况下,关键词比较次数为log(n+1) ,时间复杂度:O(logn)2.C++代码实现(1)版本1int BinarySearch1(int a[], int value, int n) //二分查找(折半查找),{ int low, high, mid; low = 0;...

2019-07-20 09:15:39 169

原创 查找算法三:顺序查找

1.原理简介 最坏情况须比较n+1次,时间复杂度:O(n) 。平均查找长度为ASL=1/n(1+2+3+…+n)=(n+1)/22.C++代码实现(1)数组法实现int SequenceSearch(int a[], int value, int n)//数组查找{ int i; for(i=0; i<n; i++)...

2019-07-20 09:08:54 424

原创 查找算法二:哈希查找(散列查找)

哈希查找是通过计算数据元素的存储地址进行查找的一种方法。⑴用给定的哈希函数构造哈希表;⑵根据选择的冲突处理方法解决地址冲突;⑶在哈希表的基础上执行哈希查找。构造哈希函数:直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法。冲突解决:开放定址法、链地址法。#define MaxSize 100 //定义最大哈希表长度#define NULLKEY -1 //定...

2019-07-20 08:58:48 745

原创 查找算法1:分块查找(索引查找)

分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。当增加或减少节以及节点的关键码改变时,只需将该节点调整到所在的块即可。在空间复杂性上,分块查找的主要代价是增加了一个辅助数组。分块查找的速度虽然不如折半查找算法,但比顺序查找算法快得多,同时又不需要对全部节点进行排序。当节点很多且块数很大时,对索引表可以采用折半查...

2019-07-20 08:55:59 2754

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除