算法
q2nAmor
QT/C++、opengl、opencl、音视频
展开
-
算法-详解堆排序算法
堆排序是利用堆的性质进行的一种选择排序。时间复杂度:时间复杂度:O(nlogn) 空间复杂度:O(1)(就地排序,用于堆化(又称筛选)的辅助空间)性能:由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的。堆排序的时间,主要由建立初始堆和反复重建堆这两部分的时间开销构成。堆排序是一种不稳定排序。 科普:(排序的稳定性是指如果在排序的序列中,存在前后相同的两个元素的话,排序前和原创 2017-07-07 01:39:17 · 1658 阅读 · 2 评论 -
算法-快速排序算法
快速排序算法是分治算法技术的一个实例,也称为分区交换排序。快速排序采用递归调用对元素进行排序,是基于比较的排序算法中的一个著名算法,也是面试常考的一个算法。本文主要思想借鉴于这篇文章: 白话经典算法系列之六 快速排序 快速搞定 http://blog.csdn.net/morewindows/article/details/6684558时间复杂度:时间复杂度:O(nlogn) 空间原创 2017-07-11 23:18:37 · 1173 阅读 · 0 评论 -
算法-归并排序算法
归并排序算法是分治算法技术的一个实例。插入排序、交换排序、和选择排序这三类排序算法都是讲无序的记录序列按关键字的带下排成一个有序序列。而归并排序则是将两个或者以上的有序序列合并成为一个有序序列的过程。将两个有序序列合并(归并)成一个有序序列称为二路归并。将N个有序序列合并(归并)成一个有序序列称为N路归并。时间复杂度:时间复杂度:O(nlogn) 空间复杂度:O(n)重要提示:归并是把两个已原创 2017-07-12 17:32:56 · 1213 阅读 · 0 评论 -
算法-floyd判环(圈)算法
floyd(Floyd cycle detection)问题:如何检测一个链表是否有环,如果有,那么如何确定环的起点?如何确定环的长度?时间复杂度:O(n) (高效率)空间复杂度:O(1)此算法又成为龟兔赛跑算法,基本思想是:好比两个人在赛跑,A的速度快,B的速度慢,经过一定时间后,A总是会和B相遇,且相遇时A跑过的总距离减去B跑过的总距离一定是圈长的n倍(初中数学题……)。弗洛伊德(Floy原创 2017-07-03 17:56:44 · 14784 阅读 · 14 评论 -
算法-直方图中的最大矩形
直方图中最大矩形((Largest Rectangle in Histogram))问题:直方图是由排列在同一基线上的一系列矩形组成的多边形。为了简单起见,假设这些矩形的宽度相等但高度可能不同。例如,下图1给出了一个直方图,其中各个矩形的高度为3、2、5、6、1、4、4,宽度为标准1单位。当给定了一个保存所有矩形高度的数组时,如何找到其中最大的矩形。对于给定的例子,最大矩形如图2阴影部分所示: 时间原创 2017-07-04 20:51:19 · 12590 阅读 · 16 评论 -
算法-KMP算法
KMP算法字符串匹配是计算机的基本任务之一。问题:给定一个主字符串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,即串的模式匹配问题。今天来介绍解决这一问题的常用算法之一,Knuth-Morris-Pratt 算法(简称 KMP),这个算法是由Knuth、Morris、Pratt共同提出。时间复杂度:O(m+n) (n为文本串T的长度)空间复杂度:O(m) (m为模原创 2017-07-21 14:56:45 · 1165 阅读 · 3 评论 -
(CVTE 笔试题)已知一个数组,不使用除法构造另一数组。
题目:给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法;要求O(1)空间复杂度和O(n)的时间复杂度。样例输入:[2,5,6,8]计算过程: - 2*5*6*8/2=240 - 2*5*6*8/5=96 - 2*5*6*8/6=80 - 2*5*6*8/8=60样例输出:[240,96,80,6原创 2017-09-08 11:41:55 · 696 阅读 · 0 评论