`

大O表示法

 
阅读更多
大O表示法


汽交按尺寸被分为若干类、微型、小型、中型等等。在不提及具体尺寸的情况下,这些分类可以为我们所涉及到车的大小提供一个大致慨念。我们同样也需要一种快捷的方法来评价计算机算法的效率,在计算机科学中,这种粗略的度量方法被称作“大o”表示法。在比较算法时似乎应该说一些类似“算法A比算法B快两倍”之类的话,但实际上这类陈述并没有多大意义。为什么?这是由于当数据项个数变化时,对应的比例也会发生根本改变。有可能数据项增加了50%,则A就比B快了三倍。或有可能只有一半的数据项,但现在A和B的速度是相同的。我们所需的是一个可以描述算法的速度是如何与数据项的个数相联系的比较。下面是我们目前所见过的算法大o表示。
无序数组的插入;常数
    无序数组的插入是我们到现在为止所见过的算法中唯一一个与数组中的数据项个数无关的算法;新数据项总是被放在下一个有空的地方,a[nElems],然后nElems增加。无论数组中的数据项个数N有多大,  一次插入总是用相同的时间。我们可以说向一个无序数组中插入—个数据项的时间T是一个常数K:
    T=K
    在现实情况中,插入所需的实际时间(不管是微秒还是其他单位)与以下这些出素有关:微处
理器,编译程序生成程序代码的效率,等等。  上面等式中的常数K包含了所有这些因素。在现实际情况要得到K的值,需要测量一次插入所花费的时间。(软件就是为了这个目的们存在的。)K就等于这个时间。
线性查找:与N成正比
    T=K*N/2
    将2并入K可以得到一个更方便的公式。T=K*N
二分查找:与log(N)成正比
    同样,我们可以为二分查找制定出一个与T和N有关的公式:
    T=K*log (N)
    正如前面所提到的,时间T与以2为底N的对数成正比。实际上,由于所有的对数都和其他
对数成比例(从底数为2转换到底数为10需乘以3、322),我们可以将这个为常数的底数也并入K。
由此不必指定底数:
    T=K*log(N)
不要常数
    大o表示法同上面的公式比较类似,但它省去了常数k。当比较算法时,并不在乎具体的微处
理器芯片或编译器;真正需要比较的是对应不同的N值,T是如何变化的,而不是具体的数字。因
此不需要常数。
    大o表示法使用大写字母o,可以认为其含义是“order of(大约是)。我们可以使用大o表示
法来描述线性查找使用了o(N)级时间,二分查找使用了o(logN)级时间。向一个无序数组中插入
使用了o(1)。(小括号中是数字1。)
线性查找                          o(N)
二分查找                          o(logN)
无序数组的插入                    o(1)
有序数组的插入                    o(N)
无序数组的删除                    o(N)
有序数组的删除                    o(N)
  大o表示法的实质并不是对运行时间给出实际值,而是表达了运行时间是如何受数据项个数所
影响的。除了实际安装后真正去测量一次算法的运行时间之外,这可能是对算法进行比较的最有意
义的方法了。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    时间复杂度和空间复杂度,大O表示法【数据结构和算法入门2】

    时间复杂度和空间复杂度,大O表示法【数据结构和算法入门2】

    大O表示法与算法复杂度分析:深入理解与应用指南

    本文详细介绍了大O表示法及其在算法复杂度分析中的应用,包括算法复杂度的重要性、大O表示法的基本概念和分类、如何使用大O表示法进行复杂度分析,以及代码示例。希望这能帮助读者更好地理解和应用大O表示法,提高...

    大O表示法复杂度速查表

    大O表示法复杂度速查表 包括搜索、排序、图、堆算法及各种数据结构的大O复杂度表示法。

    《Java数据结构和算法》学习笔记(1)——数组 二分法 大O表示法

    本文将深入探讨《Java数据结构和算法》学习笔记的第一部分,主要聚焦于数组、二分法以及大O表示法。这些基础知识对于提升代码性能和优化解决方案具有决定性的作用。 **数组**是编程中最基本的数据结构之一,它在...

    [2.2.1]--202)大O表示法.srt

    [2.2.1]--202)大O表示法.srt

    Coursera课程:数据结构与算法(UCSD)模块1第二周Python答案(大O表示法,斐波拉契数列,最大公约数代码)

    课程链接:... week2小测答案:大O表示法,函数增长率3. week2编程作业答案:斐波拉契数列(求值、求个位数、求和、求平方和),最大公约数,最小公倍数以上均为Python解法

    Java常用算法手册

    1.大O表示法:粗略的量度方法即算法的速度是如何与数据项的个数相关的 算法 大O表示法表示的运行时间 线性查找 O(N) 二分查找 O(logN) 无序数组的插入 O(1) 有序数组的插入 O(N) 无序数组的删除 O(N) 有序...

    数据结构和算法德国大学课件

    #### O-Notation(大O表示法) - **定义**: - 大O表示法是用来描述算法运行时间上界的一种记号。它提供了一个算法在最坏情况下的运行时间的上界。 - 如果我们有一个函数`g(n)`,我们说`g(n) = O(n^k)`,意味着...

    基于Python字典的图书管理系统设计及算法分析(包含详细的完整的程序和数据)

    内容概要:详细介绍了算法分析的重要性和其常用的分析工具——大O表示法,接着通过Python实现的一个简单图书管理系统案例来展示常见时间复杂度的表现形式以及不同操作所需的不同时间开销。通过实际项目讲解了常数...

    《算法导论》完整的课件下载

    渐近表示法主要包括三种:大O表示法(O-notation)、Omega表示法(Ω-notation)以及Theta表示法(Θ-notation)。 #### 大O表示法(O-notation) 大O表示法用来描述一个函数在最坏情况下的上界。如果有一个函数\( ...

    算法导论第二版答案

    7. 大O表示法:在算法分析中,大O表示法用来描述一个函数最坏情况下的增长趋势。例如,O(n)表示算法运行时间随着输入大小n线性增长。 8. 第2章到第25章的内容概览:尽管没有具体内容,但可推断出《算法导论》这本书...

    时间复杂度的计算.doc

    本文档主要介绍了时间复杂度的基本概念、大O表示法以及常见时间复杂度的数量级。 首先,时间复杂度分为两种:实际的时间消耗(时间复杂度)和渐近时间复杂度。实际时间复杂度是算法在特定输入下执行所需的时间,而...

    Big-O-ology

    - **定义**:大O表示法用于描述算法最坏情况下的运行时间上界。如果一个算法的时间复杂度为 \( O(f(n)) \),意味着该算法的执行时间不会超过某个常数乘以 \( f(n) \) 的值。 - **形式化定义**:设 \( T(n) \) 表示...

    算法导论习题解-相信大家都知道

    特别是,它解释了大O表示法、小o表示法、大Ω表示法、小ω表示法以及Θ表示法的概念。这些符号用于描述算法的渐进行为。 #### 3.1 渐近记号 - **大O表示法**:用于描述一个函数的最大上界。 - **小o表示法**:表示...

    (C++ 11)The C++ Standard Library A Tutorial and Reference 2nd Edit.pdf

    - **大O表示法**:大O表示法是一种用于描述算法复杂度的方法,它提供了衡量算法执行时间或空间需求的一种方式。通过大O表示法,可以直观地了解算法随着输入规模增长的表现。 - **常数时间复杂度**:O(1),不论输入...

    算法设计与分析C++语言描述(陈慧南版)课后答案[参照].pdf

    在分析 Binary Search 的时间复杂度时,我们可以使用大O表示法,例如O(log n)。 时间复杂度的分析 在算法设计中,时间复杂度的分析是一个重要的步骤。我们可以使用大O表示法来表示算法的时间复杂度,例如O(n)、O...

    算法时间复杂度的计算方法

    时间复杂度的计算方法可以通过大 O 表示法来表示。Big O notation 是一种数学表示法,用于描述算法的时间复杂度。它表示了算法的执行时间与问题规模之间的关系。例如,O(n) 表示算法的执行时间与问题规模 n 成正比...

    C++数据结构与算法

     2.3 大O表示法的性质  2.4 Ω表示法与Θ表示法  2.5 可能存在的问题  2.6 复杂度示例  2.7 确定渐近复杂度示例  2.8 最好、平均和最坏情况  2.9 摊销复杂度(amortized complexity)  2.10 NP完整性  2.11...

    数据结构与算法-面向对象的C++设计模式

    - 提出了大Ω表示法,并讨论了更多表示法如大Θ和小o表示法。 - 进行了算法的渐近分析,包括运行时间分析的大O规则和各种示例。 **第4章 数据结构与算法** - 本章深入讲解了面向对象的C++设计模式,如何通过这些...

Global site tag (gtag.js) - Google Analytics