【Pythoon3】21.进入算法的世界

1.算法

知识点:算法是指为了解决某项工作或某个问题,所需要有限数量的机械性或重复性指令与计算步骤。
1
2
3
:以下Python程序片段是否相当严谨地表达出算法的定义?

count = 0
while count != 3:
         print(count)

:不够严谨,因为会造成无限循环,与算法有限性的特性相抵触。
1
2
3

2.时间复杂度O(f(n))

知识点

  • 程序设计人员把某个算法的执行步骤计数来作为衡量运行时间的标准。
    1
    2
    3
  • 在一个完全理想状态下的计算机中,我们定义T(n)来表示程序执行所要花费的时间,其中n代表数据输入量。程序的运行时间或最大运行时间是时间复杂度的衡量标准,一般以Big-oh表示。
    1
    2
    3
  • 在分析算法的时间复杂度时,往往用函数来表示它的成长率,其实时间复杂度是一种“渐近表示法”。
    1
    2
    3
  • O(f(n))可视为某算法在计算机中所需运行时间不会超过某一常数倍数的f(n),也就是说某算法运行时间T(n)的时间复杂度为O(f(n))(读成Big-oh of f(n) 或 Oder is f(n)。
    1
    2
    3
  • 存在两个常数c与n0,当n>=n0时,T(n)<=cf(n).f(n)又称为运行时间的成长率。由于采用的是宁可高估也不要低估的原则,因此估计出来的函数是真正所需运行时间的上限。
    1
    2
    3
  • 事实上,时间复杂度只是执行次数的一个概略的估算,并非真实的执行次数。而Big-oh是一种用来表示最坏运行时间的估算方式,也是最常用于描述时间复杂度的渐近式表示法。
    1
    2
    3
  • 常见的Big-oh:
  • O(n)称为线性时间,表示执行的时间会随着数据集合的大小而线性增长。
  • O(1)称为常数时间,表示算法的运行时间是一个常数倍数。
    1
    2
    3
  • 对于n>=16时,时间复杂度的优劣比较关系:
  • O(1) < O(log2n) < O(n) < O(nlog2n) < O(n2) < O(n3) < O(2n)
    1
    2
    3
  • 常见的最坏运行时间曲线:
    在这里插入图片描述

1
2
3
:运行时间T(n) = 3nnn + 2nn + 5n,时间复杂度是多少?
:首先得找出常数c与n0,c=10时,若n0=0,c=10时,若n>=n0,则3n
nn + 2nn + 5n<=10nnn,因此得知时间复杂度为O(nnn)。
1
2
3
:以下程序片段的Big-O是多少?

total = 0
for i in range(1, n+1):
      total = total + i*i

:循环执行n次,所以是O(n)。
1
2
3

3.算法的五个条件

知识点

  1. 输入(Input):0个或多个输入数据,这些输入必须有清楚的描述或定义。
  2. 输出(Output):至少会有一个输出结果,不可以没有输出结果。
  3. 明确性(Definiteness):每个指令或步骤必须是简洁明确的。
  4. 有限性(Finiteness):在有限步骤后一定会结束,不会产生无限循环。
  5. 步骤清楚且可行,能让用户用纸笔计算而求出答案。

4.基本算法的基础知识

  1. 分治法的核心思想
    分治法的核心思想在于将一个难以直接解决的大问题按照不同的分类分割成两个或者更多的子问题,以便各个击破,分而治之。

  2. 递归至少要定义的两个条件
    可以反复执行的递归过程,跳出递归执行过程的出口。

  3. 贪心法的核心概念
    贪心法又称贪婪算法,方法时从某一起点开始,在每一个解决问题步骤中使用贪心原则,即采取在当前状态下最有利或最优化的选择,不断的改进该解答,持续在每一步骤中选择最佳的方法,并且逐步逼近给定的目标,当达到某一步骤不能再继续前进时。算法就停止,就是尽可能快地求得更好的解。

  4. 动态规划法与分治法的差异
    动态规划法主要的做法是:如果一个问题答案与子问题相关的话,就能将大问题拆解成各个小问题,其中与分治法最大不同的地方是可以让每一个子问题的答案被存储起来,以供下次求解时直接取用,这样的做法不但能减少再次计算的时间,并将这些解组合成大问题的解答,故而使用动态规划可以解决重复计算的问题。

  5. 迭代法
    迭代法是指无法使用公式一次求解,而需要使用迭代,例如用循环去重复执行程序代码的某些部分来得到答案。

  6. 枚举法
    枚举法的核心思想是:列举所有的可能。根据问题要求,逐一列举问题的解答,或者为了便于解决问题,把问题分为不重复、不遗漏的有限种情况,逐一列举各种情况,并加以解决,最终达到解决整个问题的目的。

  7. 回溯法
    回溯法也算是枚举法中的一种,对于某些问题而言,回溯法是一种可以找出所有(或一部分)解的一般性算法,同时避免枚举不正确的数值。一旦发现不正确的数值,就不再递归到下一层,而是回溯到上一层,以节省时间,是一种走不通就退回再走的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值