算法分析时间复杂度

对一个算法的分析,很多时候我们更关心算法运行的时间复杂度。算法的时间复杂度中,我们关心算法运行的时间上界。即大O阶分析方法。

时间复杂度的分类:

1、没有循环递归的基本都是常数阶。

2、有一层循环的就是线性阶。

for(int i=0;i<n;i++){

//dosth

}

3、对数阶:一般类似如下:

while(i<n){

i=i*2;

}

会循环log2N次。所以是对数阶。

4、平方阶

4.1有两个for循环如下所示:

for(int i=0;i<n;i++)

for(int j=0;j<n;j++){

//执行O(1)的操作

}

4.2有两个for循环如下所示:

for(int i=0;i<m;i++)

for(int j=0;j<n;j++){

//执行O(1)的操作

}

4.3有两个for循环如下所示:

for(int i=0;i<m;i++)

for(int j=0;j<i;j++){

//执行O(1)的操作

}

一个算法的时间复杂度,可以求各个关键步骤的累加和。主要是循环。

时间: 2024-10-08 01:31:03

算法分析时间复杂度的相关文章

算法时间复杂度的计算 [整理]

基本的计算步骤 时间复杂度的定义 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数.记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度. 根据定义,可以归纳出基本的计算步骤 1. 计算出基本操作的执行次数T(n) 基本操作即算法中的每条语句(以;号作为分割),语句的执行次数也叫做语

转 算法时间复杂度的计算 [整理]

来自 http://univasity.iteye.com/blog/1164707 基本的计算步骤  时间复杂度的定义     一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数.记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度. 根据定义,可以归纳出基本的计算步骤 1. 计算出

数据结构:排序算法

排序算法 <<插入排序>> *直接插入排序* 思想 每次取剩下的一个元素插入到已经有序的序列中. 代码 public static void InsertSort(int[] arr){ if(arr == null || arr.length == 0){ System.err.println("ERROR INPUT"); return; } int n = arr.length; for(int i = 1; i < n; i++){ int tem

算法-计数排序及其变体

本文由@呆代待殆原创,转载请注明出处. 简介:用于整数排序,不同于比较排序,计数排序假设输入元素的大小在0到k之间,通过计算比 i 小的数的个数而确定 i 的位置. 思路:计算所排序的数组中,比元素 i 小的数的个数 n,如果n=5,那么 i 就应该排列在第6个位置上,通过计算每一个元素的 n 值,我们就能知道每一个元素的位置,因为元素有可能重复,所以我们还有记录重复的数的个数以免把重复的数都重复放置到同一个位置上(当然如果你想去掉重复的数时,可以省略这一步). 算法分析 时间复杂度:Θ(n+k

选择冒泡排序

1.选择排序 (1).算法思想:依次是下标为(0,1,2,....n)的数字和其后的所有数字进行比较,每一轮的比较结果:都先确定最前面的是最小的数字: (2).代码实现 #include<stdio.h> void sort(int *a, int count); void showArray(int *a, int count); void showArray(int *a, int count){     int i;     for(i = 0; i < count; i++){

我的Java开发学习之旅------&gt;Java经典排序算法之冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 一.算法原理 冒泡排序算法的运作如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3.

希尔堆快排

1.希尔排序 (1).算法思想:希尔排序是插入排序的改良算法,增加了一个步长step,每次插入排序使步长为step的元素形成一个递增序列,然后缩小增量,继续插入,直至step=1时,就是插入排序了,此时排序完成: 算法模型: (2).代码实现 #include<stdio.h> void insertSort(int *a, int count, int step); void showArray(int *a, int count); void shellSort(int *a, int c

数据结构和算法-002 数组排序 冒泡排序

冒泡排序 1算法原理 1. 冒泡排序算法的运作如下:(从后往前) 2. 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 3. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 4. 针对所有的元素重复以上的步骤,除了最后一个. 5. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 2算法分析 时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数 和记录移动次数  均达到最小值: ,. 所

算法-基数排序(radix sort)

本文由@呆代待殆原创,转载请注明出处. 简介:这个排序是原来用在卡片排序机上的一个算法,一般用来比较具有多对关键字域的记录,如日期(年月日),通过基数排序我们会依次对年月日这三个关键字进行排序,只要对每个关键字进行排序的算法是稳定的,那么最后输出的序列就一定是正确的. 思路:基数排序思路很简单,首先取第一个关键字,然后对其进行排序,在第一次排序的基础上取第二个关键字,再对其进行排序,直到遍历完所有的关键字,一般用计数排序实现基数排序. 算法分析 时间复杂度:Θ(i*x)  i 是关键码的数量,x