题目来源:《剑指offer》面试题40 题目:一个整形数组除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度O(n),空间复杂度O(1) 分析:运用异或的思想。我们从头到尾一次异或数组中的每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结...
分类:
编程语言 时间:
2015-09-04 22:33:48
阅读次数:
206
各个排序总结,以及时间,空间复杂度分析一.冒泡排序:
/*
冒泡排序:
排序算法思想:进行n-1趟排序,每趟,相邻元素,两两相互比较,将其中如果前一个元素比后一个元素小
则令其交换。(最后的结果是,小的往后移(从大到小的冒泡))
*/
class BubleSort
{
public static void main(String[] args)
{
int[] arr ...
分类:
编程语言 时间:
2015-08-29 12:44:30
阅读次数:
213
在上一篇文章中对时间复杂度及其举例进行了简单描述,本篇文章将分析算法的时间复杂度和相关方法。1、事前分析估算的方法 因事后统计方法更多的依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。因此人们常常采用事前分析估算的方法。本文对事后统计方法不做描述。在编写程序前,依据统计方法...
分类:
编程语言 时间:
2015-08-21 19:01:02
阅读次数:
1105
红黑树的插入和遍历时间复杂度分析
在平常的工作中,最常用的一种数据结构恐怕是std::map了。因此对其的时间复杂度分析是有必要的,编写程序时做到心中有底。
一、理论分析
在stl中std::map和std::set都采用红黑树的方式实现。我们知道插入一个元素到红黑树的时间为log(N),其中N为当前红黑树的元素个数,因此,采用插入方式构建元素个数...
分类:
其他好文 时间:
2015-08-20 13:19:39
阅读次数:
780
摘要
本文论述了在算法分析领域一个重要问题——时间复杂度分析的基础内容。本文将首先明确时间复杂度的意义,而后以形式化方式论述其在数学上的定义及相关推导。从而帮助大家从本质上认清这个概念。
前言
通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的...
分类:
编程语言 时间:
2015-08-11 18:55:02
阅读次数:
231
求最大公约数的最常用的算法是欧几里得算法,也称为辗转相除法。问题定义为求i和j的最大公约数gcd(i,j),其中i和j是整数,不妨设i>j。算法可以递归的表示:1.如果j能整除i,那么gcd(i,j)=j;2.j不能整除i,令r=i%j,那么gcd(i,j)=gcd(j,r). 上面的算法对于ij....
分类:
编程语言 时间:
2015-08-11 10:00:37
阅读次数:
129
排序各种排序算法的比较
冒泡排序基本定义两两比较相邻记录的的关键字,如果反序则交换,直到没有反序的记录为止。时间复杂度分析最好的情况是,数组是有序的,只需要n - 1次的比较,时间复杂度是O(n)O(n)
最坏的情况是,数组是逆序的,需要比较∑i=2n(i?1)=1+2+3+...+(n?1)=n(n?1)2\sum_{i=2}^{n} (i - 1) = 1+2+3+...+(n-1) = \...
分类:
编程语言 时间:
2015-08-03 22:41:28
阅读次数:
194
为什么要进行算法分析?
预测算法所需的资源
计算时间(CPU 消耗)内存空间(RAM 消耗)通信时间(带宽消耗)
预测算法的运行时间
在给定输入规模时,所执行的基本操作数量,或者称为算法复杂度(Algorithm Complexity)
如何衡量算法复杂度?
内存(Memory)时间(Time)指令的数量(Number of Steps)特定...
分类:
编程语言 时间:
2015-08-02 21:44:16
阅读次数:
213
示例代码(1)
decimal Factorial(int n)
{
if (n == 0)
return 1;
else
return n * Factorial(n - 1);
}
【分析】
阶乘(factorial),给定规模 n,算法基本步骤执行的数量为 n,所以算法复杂度为 O(n)。
示例代码(2)
int FindMaxElement(int[] array)
{
int max = array[0]...
分类:
编程语言 时间:
2015-08-02 21:43:05
阅读次数:
174
这题看似简单,不过两个要求很有意思:1、不准用除法:最开始我想到的做法是全部乘起来,一项项除,可是中间要是有个0,这做法死得很惨。2、空间复杂度O(1):题目说明了返回的那个数组不算进复杂度分析里面做法:既然不用除法,对于某个数i, result[i] = 0到i - 1的乘积 X i + 1...
分类:
其他好文 时间:
2015-08-02 19:46:56
阅读次数:
124