伪代码与时间复杂度

伪代码规则:注意关键字不区分大小写

变量声明语句:Dim<变量> As <类型> 如:Dim a As INTEGER;

赋值语句:<变量>=<表达式> 如:a = 1; 或 a <- 1;

输入与输出:Input 与Output;

简单运算符:a + b > c;

复合条件:(a < b) AND (c < d);

IF条件子句:

if a = b Then

i = i + 1;

Else i = i - 1

EndIf

多重选择case子句:

case <变量> of

case 1: <条件>

i = i  + 1;

case 2: <条件>

i = i + 2;

EndCase

For循环子句:

For<计数器>=<开始>To<结束>

<循环体>

EndFor

While循环子句:

Do While <条件> 或 While

<循环体>

EndWhile

Until 循环子句:

Do

<循环体>

Until<条件>

算法分析:

时间复杂度:

往往只关注最坏情况的运行时间,所以只求算法的最长时间;

只关注最重要的增长量级,比如 an² + bn + c,只关注n²;

算法中常用符号:

渐近符号:

(1)O符号,渐近紧确上界,f(n) = O(g(n)),表示存在正常量c和n0使得对所有n ≥ n0,有  0 ≤ f(n) ≤ cg(n) ,即小于等于,f(n)不高于g(n)的阶;

(2)Ω符号,渐近紧确下界,f(n) = Ω(g(n)),表示存在正常量c和n0使得对所有n ≥ n0,有  0 ≤ cg(n) ≤ f(n) ,即大于等于,f(n)不低于g(n)的阶;

(3)o符号,非渐近紧确上界,f(n) = o(g(n)),表示存在正常量c和n0使得对所有n ≥ n0,有  0 ≤ f(n) < cg(n) ,即小于,f(n)低于g(n)的阶;

(4)ω符号,非渐近紧确下界,f(n) = ω(g(n)),表示存在正常量c和n0使得对所有n ≥ n0,有  0 ≤ cg(n) < f(n) ,即大于,f(n)高于g(n)的阶;

(5)Θ符号,渐近紧确界,f(n) = Θ(g(n)),表示存在正常量c1,c2,n0使得对所有n ≥ n0,有 0 ≤ c1g(n) ≤ f(n) ≤ c2g(n),f(n)与g(n)同阶;

举例说明渐近符号的相关用法:

1、插入排序的时间复杂度是O(n²),代表插入排度的时间复杂度是一个小于等于n²的集合(1,n,n²等),时间复杂度即可以是1也可以是n²;

2、如果时间复杂度是Θ(2n²),代表时间复杂度可以是n²,2n²,3n²等;

3、如果时间复杂度是Ω(n²),代表时间复杂度可以是n²,n^3等;

4、如果时间复杂度是o(n²),代表时间复杂度可以是1,n,2n等但不是能n²;

5、如果时间复杂度是ω(n²),代表时间复杂度可以是n^3,n^4等但不是n²;

标准记号与常用函数:

1、下取整(floor)与上取整(ceiling);

2、取模运算: a mod b的值即a/b的余数;

3、整除:a | b;

4、对数:

欧几里得算法:

两个整数的最大公约数,等于小整数与两整数相除的数的最大公约数;

证明:

a可以表示成a = kb + r,则r = a mod b

假设d是a,b的一个公约数,则有

d|a, d|b,而r = a - kb,因此d|r

因此d是(b,a mod b)的公约数

假设d 是(b,a mod b)的公约数,则

d | b , d |r ,但是a = kb +r

因此d也是(a,b)的公约数

时间: 2024-12-21 03:03:52

伪代码与时间复杂度的相关文章

算法系列笔记8(有关图的算法二—最短路径问题)

图的最短路径问题主要分为两类,单源最短路径问题和全对最短路径问题.单源最短路径问题指给点单个源点,求其到所有其它顶点之间的最短距离.而全对最短路径问题指所有顶点之间的最短路劲问题.此外对于单对最短路径问题,从渐进意义上来看,目前还没有比最好的单元算法更快的算法来解决这一问题. 一:单源最短路径问题 单源最短路劲问题根据其权重分为四类,当图G=(V,E)为无权图,直接使用广度优先遍历(这里不做介绍):当权值为非负值,则使用Dijkstra算法:存在负权值及负权环,可以使用Bellman-Ford算

最短路径算法小结

不同性质的图中,所采取的策略有所不同,自然存在各样的求最短路径的算法. 无向无权图:BFS 有向正权图:Dijkstra 有向无负环图:Bellman-Ford(单点),Floyd-Warshall(任意两点) 有向无环图(dags): 基于动态规划的算法. 广度优先搜索(BFS) 对于无向无权图(也可以假设权值为1),就可以使用最基本的广度优先搜索算法,从源点开始对整个图进行搜索,访问到所有的点.因为广度优先搜索最先访问到的是相邻的点,所以距离最近的点最先访问到,记录的距离也就最小. 算法伪代

《算法导论》读书笔记--第二章 2.3 设计算法

我们可以使用的算法设计技术有很多.插入排序用的是增量方法,即在已经排好的数组中不断加入新的元素.下面考虑一种被称为"分治法"的设计方法. 2.3.1分治法 分治法的思想:将原问题分解为几个规模较小但是类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解.分治模式在每层递归时有三个步骤: 分解原问题为若干子问题: 解决这些子问题,递归地求解各子问题,若子问题规模足够小,则直接求解: 合并这些子问题的解成原问题的解. 归并排序算法完全遵循分治模式,操作如下:

我们可以推测矩阵乘法最优解的时间复杂度么?

矩阵乘法的定义为: 按照定义,一个简单的方阵乘法伪代码如下: int A[48,48],B[48,48],C[48,48] for i in 1 to 48 for j in 1 to 48 for k in 1 to 48 C[i,j]+=B[i,k]*A[k,j] 三层嵌套,时间复杂度为O(n3),n为方阵的边长. 由于矩阵乘法的广泛运用,如何优化矩阵乘法运算,有重要的意义.在不考虑矩阵的疏密程度下,如何有效减少矩阵乘法中算术乘法的使用次数是一个主要的优化方向. 最早的矩阵乘法优化算法,是由

求Fibonacci数的三种方法和时间复杂度解析

题目: 定义Fibonacci数列如下: f(0)=1 f(1)=1 f(n)=f(n-1)+f(n-2), n>=2 输入n,用最快的方法求该数列的第n项. 解答一: 直接用公式写递归函数.很简单,很低效,就不写了.时间复杂度T(N) = T(N-1) + T(N-2); 也是f(n)本身,2^(n/2)<f(n)<2^n. 解答二: 用循环求,也很直接,效率很高了,时间复杂度是O(n). int f(int n) { if(n <= 1) return 1; int f0=1,

【ToReadList】六种姿势拿下连续子序列最大和问题,附伪代码(以HDU 1003 1231为例)(转载)

问题描述:       连续子序列最大和,其实就是求一个序列中连续的子序列中元素和最大的那个. 比如例如给定序列: { -2, 11, -4, 13, -5, -2 } 其最大连续子序列为{ 11, -4, 13 },最大和为20. =============================================================== 问题分析: 1.首先最朴素的方法是暴力 O(n^3) 直接两个for循环枚举子序列的首尾,然后再来个循环计算序列的和,每次更新和的最大值.

算法时间复杂度分析基础

摘要      本文论述了在算法分析领域一个重要问题--时间复杂度分析的基础内容.本文将首先明确时间复杂度的意义,而后以形式化方式论述其在数学上的定义及相关推导.从而帮助大家从本质上认清这个概念. 前言      通常,对于一个给定的算法,我们要做 两项分析.第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式.数学归纳法等.而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度.算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上

红黑树的理解与学习+伪代码

在看HashMap源码的时候,涉及到红黑树,这个数据结构早已听闻大名,而且在学校的教材中没有讲这个数据结构,所以花了点时间去学习和理解这个数据结构.(比我想象中的复杂的多--) Red-Black Tree的简介 首先这是个二叉查找树,它属于但又不严格属于平衡二叉树(AVL),因为它没有像平衡二叉树一样,严格规定平衡因子的绝对值要小于等于1,而是靠他的颜色规定来达到高性能. 一棵拥有n个元素的RB树,树的高度最多为2log(n + 1),所以操作的时间复杂度是O(logN)级别的.--所以它其实

你能找到心仪的妹子吗?- 时间复杂度进阶

这个五一是个不平凡的五一,苍老师成功诞下了双胞胎. 伴随着你长大的“老师”都已经结婚生子,那么你呢?你的爱情又在哪里? 假如有一天,有这样一个机会降临到你的头上. 你的面前是一条很长很长的路,这条路上齐刷刷的站满了妹纸,没错,就是妹子,一双双大白腿闪闪发光. 此时你狠幸运,允许你从这些妹纸中选择一个最喜欢的带走,,, 但是呢,有一个条件,你只能从路的这头走到那头,只要你选择了一个妹子,就要离开这里,这个过程中,你只能选择一次,不可以走回头路,只要你选择了,那么不管后面的妹子多诱人都已经和你无关.