算法
ptgood
这个作者很懒,什么都没留下…
展开
-
大数据问题
top k问题 即在很多数据的情况下选出前k大的数据,数据量可上亿 要分情况讨论, 如果是堆排序,时间复杂度是O(lgn)级别,,比较次数和交换次数相同,平均为logn/2, 可以采用插入排序的办法,只维护一个k的数组,按降序排列,只用在中间插入并删掉超过k的部分,这个时间复杂度为O(n),平均比较次数为O(n/2),移动次数是O(n/2),如果可以做成链表结构,则还能省去移动的开销,而只用在比较完成后修改指针 大数据排序 如果是上亿的数据,常规的办法:加载到内存并用经典算法是行不通的,内存没办原创 2020-08-17 10:34:38 · 292 阅读 · 0 评论 -
排序算法剖析
前言 学习自用,排序算法再回顾,这里就不放代码了 正文 冒泡排序 冒泡是从前往后相邻比较,每一次比较会把当前最大值传到后面,传到最后面以后就不用管最后面的了 因为他是只比较相邻的而且是从前往后的,所以适合用在链表的排序,(因为单向链表从前往后走,且相邻之间很容易用一个next指针比较) 从前往后这个特性应该代码的局部性也比较好吧? 时间复杂度是O(n^2),看代码可以说是两个循环所以是O(n^2),具体推导TODO 可以看出冒泡排序除了相邻比较以外,还会用到很多次相邻的交换 没有用到任原创 2020-07-29 19:38:03 · 135 阅读 · 0 评论 -
KMP算法挖坑
左神的KMP代码 #include<iostream> #include<string> using namespace std; int* getNextArray(string str2){ if(str2.size() == 1){ int* next = new int[1]; next[0] = -1; return next; } int...原创 2020-05-05 15:00:50 · 146 阅读 · 0 评论 -
二叉树先中续后续遍历算法代码解析
转载自https://blog.csdn.net/zhangxiangdavaid/article/details/37115355 并加上自己理解 中序遍历的递归定义:先左子树,后根节点,再右子树。如何写非递归代码呢?一句话:让代码跟着思维走。我们的思维是什么?思维就是中序遍历的路径。假设,你面前有一棵二叉树,现要求你写出它的中序遍历序列。如果你对中序遍历理解透彻的话,你肯定先找到左子树的最下...转载 2020-04-25 23:52:51 · 480 阅读 · 0 评论 -
快速排序三种实现
转自https://blog.csdn.net/qq_36528114/article/details/78667034并加以修改 快速排序的递归实现 void QuickSort(int* array,int left,int right) { assert(array); if(left >= right)//表示已经完成一个组 { return; } int ind...原创 2020-04-25 11:16:49 · 492 阅读 · 0 评论