
数据结构与算法
文章平均质量分 85
Alatebloomer
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链表学习
1.链表创建 链表节点结构创建 struct ListNode { int val; ListNode *next; ListNode(int x):val(x),next(NULL){} }; 利用迭代器创建链表 using vecIter = vector::iterator; ListNode *createLinkedList(vecIter beg, vecIter end原创 2018-02-02 13:34:31 · 286 阅读 · 0 评论 -
组合
无重复元素集合的子集,比如{1,2,3}的子集解题思路:n个元素总共有2^n种情况,运用位运算模拟,例如三个数字可以用三bit表示,1代表存在该数字,0代表不存在#include <iostream> using namespace std; typedef unsigned long DWORD; // DWORD 即double world,双字节。 voi...原创 2018-07-04 10:45:48 · 194 阅读 · 0 评论 -
海量处理处理
1.单词统计假设你只有一台内存2G的笔记本,I5的四核CPU以及4T的硬盘,请设计一个程序,实现对1T英文数据进行词频分析,完成以下两个小题: (1)求所有词的词频,把相应的值存入文件; (2)找出这些词里卖弄出现频次最高的100个词,并用代码实现 名词解释:1T=1024G,为硬盘空间单位,词频,每个单词出现的次数。 解答: (1).将1T的数据使用哈希函数映射到10000个文件当中...原创 2018-06-23 12:41:38 · 297 阅读 · 0 评论 -
最长重复字符串
求解一个字符串中出现的最长的重复的字符串,可以重叠可以使用后缀数组的解法,先建立后缀数组,然后将数组排序,最后比较相邻的数组之间是否存在相同字符子串#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; vector&...原创 2018-06-22 17:09:19 · 1272 阅读 · 0 评论 -
扩展KMP
转:https://blog.youkuaiyun.com/dyx404514/article/details/41831947拓展KMP是对KMP算法的扩展,它解决如下问题:定义母串S,和子串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i,n-1]的最长公共前缀,要求出所有extend[i](0<=i<n)。注...转载 2018-06-22 13:14:48 · 325 阅读 · 0 评论 -
KMP(字符串匹配算法)
转载自http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morri...原创 2018-06-06 20:56:47 · 738 阅读 · 0 评论 -
树的学习(二)
第二讲来学习二叉树的三种遍历方法,分别是前序遍历,中序遍历以及后序遍历。三种遍历都可以用递归和非递归实现 class TreeNode { TreeNode *left; TreeNode *right; int val; };递归的三种遍历//前序遍历 void preorder(TreeNode *root, vector<int> &path) { if ...原创 2018-06-06 11:22:06 · 155 阅读 · 0 评论 -
容器矩阵
利用容器实现矩阵#ifndef MATRIX_H #define MATRIX_H #include <vector> #include <initializer_list> using namespace std; template <typename Object> class matrix { public: //matrix(int rows, i...原创 2018-06-05 21:25:01 · 431 阅读 · 0 评论 -
快速选择算法
快速选择算法我们可以将快速排序算法稍作修改将其应用在选择问题上,该算法称为快速选择算法,复杂度O(NlogN),最坏情况为O(N^2)。令|A|为A中的元素个数,查找A中第k个最小元,算法步骤如下:1)如果|A|=1,那么k=1,则将A中的元素作为答案返回2)取A中一元素V,称为枢纽元。3)将A-{V}分为两个不相交的集合:A1和A2,其中A1中的元素值小于等于V,A2中的元素值大于等于V4)若k...原创 2018-05-17 11:30:47 · 3198 阅读 · 0 评论 -
排序算法总结
排序算法总结1、冒泡排序,运行时间O(N^2),思想就是反复交换相邻的未按次序排序的元素,依次将最小的、第二小的、、、,排在第一位、第二位、、、、、。void BubbleSort(ElementType A[], int N) { ElementType temp; for (int i=0;i<N-1;++i) for (int j = N - 1; j > i; -...原创 2018-03-27 17:43:34 · 280 阅读 · 0 评论 -
分治法
分治法分治法:将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后合并这些这些子问题的解来建立原问题的解。分治模式在每层递归时都有三个步骤:分解原问题为若干子问题,这些子问题是原问题的规模较小的实例。解决这些子问题,递归的求解各子问题。然而,若子问题的规模足够小,则直接求解。合并这些子问题的解成原问题的解归并排序算法就完全遵循了分治模式。未完待续。。。。。。...原创 2018-03-23 16:49:35 · 176 阅读 · 0 评论 -
树的学习(一)
树的学习(一)1.在一棵树种,对于任意节点n,n的深度为从根到n的唯一路径长,因为根的深度为0。2.在一棵树种,对于任意节点n,n的高为从n到一片树叶的最长路径的长,因为树叶的高度都是0。3.树的三种常见的遍历方式,先序遍历、中序遍历和后序遍历。在先序遍历中对节点的处理工作是在诸儿子节点被处理之前,后序遍历中节点的处理工作是在它的诸儿子节点处理之后进行,中序遍历中节点的处理是在中间(左儿子、节点、...原创 2018-03-01 13:07:37 · 296 阅读 · 0 评论 -
排序问题next_permutation
利用next_permutation能够找出排序的下一个数。 next_permutation的思想是从右向左寻找两个相邻的元素,令第一个元素为*i,第二个元素为*ii,且满足*i<*ii。找到这样一组元素后,在从最尾端开始往前查找,找出第一个大于*i的元素,令为*j,将i、j元素对调,在将ii之后的所有元素颠倒排列,即可得到下一次排序。 数字两个字符串共有字符的一个规定长度排列 #...原创 2018-09-04 21:14:15 · 338 阅读 · 0 评论