稳定性:
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,
冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
复杂度
冒泡法: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。不说了。
直接插入排序:O(n*n)
希尔排序:算法的复杂度为n的1.2次幂
选择排序:O(n*n)
快速排序:不稳定,平均时间复杂度O(nlog...
分类:
编程语言 时间:
2015-01-10 01:09:47
阅读次数:
222
这题目是经典的DP题目,也可叫作LIS(Longest Increasing Subsequence)最长上升子序列 或者 最长不下降子序列。很基础的题目,有两种算法,复杂度分别为O(n*logn)和O(n^2) 。A.O(n^2)算法分析如下:(a[1]...a[n] 存的都是输入的数)1、对于a...
分类:
编程语言 时间:
2015-01-07 18:26:49
阅读次数:
280
一:起因
(1)包括冒泡算法、快排算法、插入排序算法等;还有基于外部排序的归并排序(以二路归并排序为例 )
但是基本上在一个数量级上;
(2)
mergesort (归并排序) 可以应用在外部排序,这与基于内存的quicksort(快速排序)略有不同,他们的算法复杂度都可以达到O(nlogn)
(3)mergesort 是稳定的排序算法,需要额外的空间开销O(n)...
分类:
其他好文 时间:
2015-01-06 17:52:40
阅读次数:
241
排序总结面试经验硅谷某前沿小Startup面试时,问到的一个题目就是写一个快速排序算法。进而面试官问到了各种算法的算法复杂度,进而又问了Merge Sort 与 QuickSort 的优劣。对排序算法的全面理解,体现了计算机学生的功底。现在来讲Merge Sort 与Quick Sort 是最流行的...
分类:
编程语言 时间:
2015-01-02 23:42:54
阅读次数:
1524
在上一篇我们提到了网络流算法Push-relabel,那是90年代提出的算法,算是比较新的,而现在要说的Dinic算法则是由以色列人Dinitz在冷战时期,即60-70年代提出的算法变种而来的,其算法复杂度为O(mn^2)。
Dinic算法主要思想也是基于FF算法的,改进的地方也是减少寻找增广路径的迭代次数。此处Dinitz大师引用了一个非常聪明的数据结构,Layer Network,分层网络,...
分类:
编程语言 时间:
2015-01-02 17:36:17
阅读次数:
418
网络流的背景我就不多说了,就是在一个有向图中找出最大的流量,有意思的是,该问题的对偶问题为最小割,找到一种切分,使得图的两边的流通量最小,而且通常对偶问题是原问题的一个下界,但最小割正好等于最大流,即切割的边就是最大流中各个path饱和边的一个组合。说得可能比较含糊,这里想要了解清楚还是查阅相关资料吧。
最大流最原始最经典的解法就是FF算法,算法复杂度为O(mC),C为边的容量的总和,m为边数。...
分类:
编程语言 时间:
2015-01-02 16:02:48
阅读次数:
412
【题目】
Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.
合并几个有序链表为一个,分析算法复杂度。
【分治】
直观的想法是两两合并,有两种方法:1)list1和list2合并为newlist2,newlist2再和list3合...
分类:
其他好文 时间:
2014-12-26 11:12:18
阅读次数:
129
算法复杂度,即算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。一个算法的评价主要从时间复杂度和空间复杂度来考虑。(1)时间频度一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。算法的时间复杂度是指执行算法所需要的计算工作量。(2)时间复杂度一般情况下,算法中基本...
分类:
编程语言 时间:
2014-12-22 17:32:32
阅读次数:
209
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其...
分类:
编程语言 时间:
2014-12-15 17:02:01
阅读次数:
202
题目
Merge k sorted linked lists and return it
as one sorted list. Analyze and describe its complexity.
解答
方法1:利用分治的思想把合并k个链表分成两个合并k/2个链表的任务,一直划分,知道任务中只剩一个链表或者两个链表。可以很简单的用递归来实现。因此算法复杂度为T(k) =
2...
分类:
其他好文 时间:
2014-12-12 19:15:28
阅读次数:
120