`
追梦--
  • 浏览: 38029 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

算法的时间复杂度

阅读更多
算法的时间复杂度
    分析一个算法的好坏,时间复杂度是一个非常重要的标准。我们一般用O()表示一个算法的复杂度。
  常见的算法时间复杂度有(由小到大):
  
O(1)常数阶   O(logn)对数阶   O(n)线性阶   O(nlogn)   O(n^2)   O(n^3) 
| --------             p问题(时间复杂度为上)               -----------|

O(2^n)    O(n!)
|-NP问题(复杂度为上)-|

    计算时间复杂度可分为递归和非递归两种:

  举一个简单的例子:计算斐波拉契数列  f (n) = f (n-1) +f (n-2)   (n  <  45)
    有些人第一眼看到这个问题,觉得用递归十分方便,便毫不犹豫的用了递归(这是某大学的一个考研题,很多人采用了这种算法,但是当他们将程序提交上去,在规定时间内都未能给出答案,他们都觉得不知所云),其实当我们计算过时间复杂度后,出现这个问题的原因就一目了然了。

    如果我们采用递归的方式,那么我们设进入一次递归(一个基本操作)程序运行的时间为一个单位时间
故计算       T (n) = T (n-1) + T (n-2)  + 1
       变形  T (n) + 1 = T (n-1)  + 1 + T (n-2)  + 1
       令    B (n) = T (n)+1
       所以  B (n) = B (n-1) + B (n-2)
       可见 B (n) 也是一个斐波拉契数列
       所以时间复杂度 T (n) = B (n) -1 = f (n)
    当n = 45 时,斐波拉契数列的值在 2,100,000,000 ,这意味着当我们计算斐波拉契的第45项时,我们要执行21亿次基本操作,这是不可想象的!!!因为在递归的过程中执行了大量的无用的重复计算!!!

    如果我们采用非递归的方法递推的话,十分简单,时间复杂度为 O (n)

    我在这里并不是说递归的时间复杂度一定比非递归的时间复杂度高,而是说明对于同一个问题,有不同的算法去解决这个问题,我们在之前一定要分析算法的时间复杂度。否则我们写的程序对时间的开销是不可估量的。而我们在写递归的时候,要特别注意里面嵌套了多个递归的情况。
0
2
分享到:
评论

相关推荐

    关于算法时间复杂度的计算

    算法时间复杂度的计算 算法时间复杂度的计算是计算机科学中一个非常重要的概念,它描述了算法执行时间随着输入规模的变化而增长的速度。时间复杂度通常用大 O 记法表示,即 O(f(n)),其中 f(n) 是问题规模 n 的函数...

    算法时间复杂度

    根据给定文件的信息,我们可以详细地探讨“算法时间复杂度”的相关知识点。时间复杂度是衡量算法运行时间随输入规模增长而变化的函数,它在计算机科学与编程领域扮演着至关重要的角色。接下来,我们将围绕以下几个...

    关于递归算法时间复杂度分析的探讨.pdf

    关于递归算法时间复杂度分析的探讨,是一个深入理解算法效率和优化的关键议题。递归,作为解决问题的一种强大工具,其本质是将复杂问题分解为更简单的子问题,通过求解这些子问题来达到最终解决方案的目的。然而,...

    排序算法时间复杂度的研究.pdf

    ### 排序算法时间复杂度的研究 #### 引言 排序是计算机科学中的基础操作之一,主要用于对数据集中的元素按照特定的顺序进行排列。排序算法的效率直接关系到计算机程序的整体性能。根据数据是否完全加载到内存中,...

    算法 时间复杂度 空间复杂度 经典

    ### 算法的时间复杂度与空间复杂度详解 #### 一、算法复杂度概述 在计算机科学领域,算法的时间复杂度与空间复杂度是衡量一个算法效率的重要指标。时间复杂度关注的是算法执行时间的增长速率,而空间复杂度则侧重...

    排序算法时间复杂度的分析java语言描述

    以下是对选择排序、冒泡排序、归并排序、快速排序和插入排序这五种常见排序算法的详细介绍,以及如何分析它们的时间复杂度。 1. **选择排序(Selection Sort)** - 原理:选择排序是一种简单直观的排序算法,它...

    遗传禁忌搜索算法收敛性和时间复杂度分析

    应用马尔科夫链模型证明了遗传禁忌搜索算法是以概率1收敛到全局最优解的,并应用求解随机算法时间复杂度的方法,即求解算法的期望收敛时间,估算了该算法的时间复杂度,结果证明该算法的时间复杂度与所得解的多样性、...

    分析算法时间复杂度.zip

    本资料包"分析算法时间复杂度.zip"可能是为了深入探讨这个主题,包含了可能用于教学或研究的不同文件。 "app"、"gradle"、"gradle.properties"、"settings.gradle"、"gradlew.bat"这些文件是Android开发环境中的...

    分析算法时间复杂度java.zip

    在这个"分析算法时间复杂度java.zip"文件中,我们可以预期包含的是关于如何在Java中分析和理解各种算法时间复杂度的相关资源,比如数据结构的实现及其时间复杂度分析。 数据结构是存储和组织数据的特定方式,它们对...

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

    算法时间复杂度的计算方法 时间复杂度是衡量算法性能的重要指标,它描述了算法执行时间与问题规模之间的关系。时间复杂度是算法的渐近性质,它定义了算法的执行时间与问题规模之间的关系。 时间复杂度的计算方法...

    算法时间复杂度的实验测试.doc

    算法时间复杂度的实验测试 时间复杂度是算法分析中的一个重要概念,它是衡量算法性能的重要指标。时间复杂度是指算法执行的时间与输入规模之间的关系。通过实验测试,我们可以分析算法的时间复杂度,从而了解算法的...

    算法-数据结构和算法-1-算法的引入和算法时间复杂度.rar

    这个压缩包文件"算法-数据结构和算法-1-算法的引入和算法时间复杂度.rar"主要探讨了这两个概念的入门知识,特别是关注算法的时间复杂度分析。 首先,我们需要理解什么是算法。算法是一系列明确的步骤或指令,用于...

    多段图算法时间复杂度图像

    多段图算法时间复杂度图像

    算法时间复杂度的实验测试.zip_堆排序;算法时间复杂度_时间复杂度_胡书晗

    在计算机科学领域,算法的时间复杂度是对算法运行所需计算工作量的度量,它反映了算法执行效率与输入数据规模之间的关系。本实验测试的主题聚焦于堆排序算法的时间复杂度分析,由胡书晗进行研究。堆排序是一种基于...

    算法时间复杂度(图)

    所有算法时间复杂度对比、图表形式、函数关系

    排序算法时间复杂度比较

    1. 首先产生要进行排序的整形数组(可以保存在文件中...2. 调用各种排序方法对数组排序,并记录花费时间 对于更多更高级的排序算法,以后会实现,另外,对于复杂字符串排序,这些简单排序并不适合,请采用更高效的方法

    排序算法时间复杂度的研究

    ### 排序算法时间复杂度的研究 #### 引言 排序是计算机科学中的基础操作之一,在数据处理与分析中占据着重要地位。排序算法的好坏直接影响到计算机程序的执行效率,尤其是在处理大规模数据集时更为明显。根据数据...

Global site tag (gtag.js) - Google Analytics