任何比较排序(归并排序,插入排序等等)的时间复杂度在最坏的情况下都需要做Ω(n * lgn)次比较,而这里的的计数排序由于它不是基于比较排序的思路,所以它的复杂度不收这个限制,它的时间复杂度为Θ(n),为线性时间。同时,计数排序一个重要的性质就是它是稳定的,也就是说,对于两个相同的数来说,在输入数组 ...
分类:
编程语言 时间:
2018-01-14 15:16:05
阅读次数:
216
问题是这样的:对于一株树(无向无环连通图),为每个结点分配对应的权重。要求能高效计算任意两个结点之间的路径的各类信息,其中包括路径长度(路径上所有结点的权重加总),路径中最大权重,最小权重等等。到这里一切都还是比较简单的,我们可以利用Tarjan的LCA算法在线性时间复杂度内快速求解。但是如果还要求 ...
分类:
其他好文 时间:
2018-01-05 21:58:14
阅读次数:
175
1 package org.xiu68.ch03.ex11; 2 3 public class Ex3_7 { 4 5 //用线性时间证明一个图是否是二部图 6 public static void main(String[] args) { 7 // TODO Auto-generated met ...
分类:
其他好文 时间:
2017-12-01 22:00:10
阅读次数:
118
转自:http://blog.csdn.net/liufeng_king/article/details/8480430 线性时间选择问题:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,(这里给定的线性集是无序的)。 1、随机划分线性选择 线性时间选择随机划分法可 ...
分类:
其他好文 时间:
2017-11-28 10:27:59
阅读次数:
212
【Algorithms IV】求解强连通分量 Kosaraju算法 Kosaraju算法(也被称为Kosaraju–Sharir算法)是一个在线性时间内寻找一个有向图中的强连通分量的算法。 这个拗口的名字来自他的作者,但是查不到他的生平。应该是个印度人。 求解问题:要求有向图中的强连通分量的个数/划 ...
分类:
编程语言 时间:
2017-11-26 00:40:56
阅读次数:
211
时间复杂度 一直对时间复杂度的概念不弄明白,今天就总结来做笔记学习吧 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) int count = 1; while (count < n) { count = count * 2; /* 时间复杂度为O(1)的程序步骤序列 */ } ...
分类:
其他好文 时间:
2017-11-24 19:13:30
阅读次数:
84
以下摘自SHHHS Tarjan 算法 一.算法简介 Tarjan 算法一种由Robert Tarjan提出的求解有向图强连通分量的算法,它能做到线性时间的复杂度。 我们定义: 如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称 ...
分类:
编程语言 时间:
2017-11-04 14:56:17
阅读次数:
234
BFPRT算法的作者是5位真正的大牛(Blum 、 Floyd 、 Pratt 、 Rivest 、 Tarjan)。 BFPRT解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分析,BFPRT可以保证在最坏情况下仍为线性时间复杂度。 步骤 终止条件:n=1 时,返回 ...
分类:
编程语言 时间:
2017-11-03 12:52:03
阅读次数:
180
- 概念: 大O表示法:称一个函数g(n)是O(f(n)),当且仅当存在常数c>0和n0>=1,对一切n>n0均有|g(n)|<=c|f(n)|成立,也称函数g(n)以f(n)为界或者称g(n)囿于f(n)。记作g(n)=O(f(n))。 定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时 ...
分类:
编程语言 时间:
2017-10-29 13:48:01
阅读次数:
230
前面三篇文章中,我们讨论了渐近分析,最差,平均和最佳算法案例。 渐近分析的主要思想是对不依赖于机器特定常数的算法的效率进行测量,并且不需要执行算法和程序进行比较的时间。 渐近符号是用于表示渐近分析的算法的时间复杂度的数学工具。 以下3个渐近符号主要用于表示算法的时间复杂度。 1)Θ表示法: θ符号界 ...
分类:
编程语言 时间:
2017-10-12 20:25:13
阅读次数:
359