算法篇(一)------算法设计与分析基础

1.算法的定义

给定计算问题,算法是一系列良定义的计算步骤,逐一执行计算步骤即可得到预期的输出。

2.算法的性质

(1)有穷性:算法必须在有限个计算步骤后终止

反例:给定输入数组,不断交换首尾元素的位置。

正例:选择排序

  • 第一次遍历找到数组中的最小元素
  • 第二次在剩余数组中遍历找到次小元素
  • ...
  • 第n次在剩余数组中遍历找到第n小元素
  • 直至剩余数组为0,即为有序数组

(2)确定性:算法必须是没有歧义的

反例:对于给定输入数组,交换两个数的位置。

正例:选择排序

(3)可行性:可以机械地一步一步执行基本操作步骤

反例:将大元素放数组后部,小元素放数组前部。

正例:选择排序

3.算法的表示

3.1.自然语言

(1)方法优势

  • 贴近人类思维,易于理解主旨

(2)不便之处

  • 语言描述繁琐,容易产生歧义
  • 使用了“...”等不严谨的描述

3.2.编程语言

(1)方法优势

  • 精准表达逻辑,规避表述歧义

(2)不便之处

  • 不同编程语言间语法存在差异
  • 过于关注算法实现的细枝末节

3.3.伪代码

(1)非正式语言

  • 移植编程语言书写形式作为基础和框架
  • 按照接近自然语言的形式表达算法过程

(2)兼顾自然语言与编程语言优势

  • 简洁表达算法本质,不拘泥于实现细节
  • 准确反映算法过程,不产生矛盾和歧义

例:

4.算法的分析

4.1.算法分析的原则

(1)统一机器性能

  • 统一机器性能后,算法运行时间依赖于问题输入规模与实例
  • 相同输入规模,实例影响运行

(2)常用最坏情况分析算法运行时间                               

​​​​​​​输入情况   情况说明
最好情况不常出现,不具普遍性
最坏情况确定上界,更具一般性
一般情况情况复杂,分析难度大

算法运行时间仅依赖于问题输入规模𝒏,表示为𝑻(𝒏)

(3)采用渐进分析

4.2.算法分析的工具

(1)渐近分析:忽略𝑻(𝒏)的系数与低阶项,仅关注高阶项,用记号𝚯表示

(2)渐进记号:分析𝒏充分大时函数的大小关系,并用渐近记号表示

渐进记号名称
𝑻 𝒏 = 𝚯(𝒈(𝒏))渐进紧确界
𝑻 𝒏 = 𝑶(𝒈(𝒏))渐进上界
𝑻 𝒏 = 𝛀(𝒈(𝒏))渐进下界

𝚯记号(渐进紧确界)

定义:

  • 对于给定的函数𝒈(𝒏),𝚯(𝒈(𝒏))表示以下函数的集合: 𝚯 𝒈 𝒏 = {𝑻 𝒏 : ∃ 𝒄𝟏, 𝒄𝟐, 𝒏𝟎 > 𝟎, 使得∀ 𝒏 ≥ 𝒏𝟎, 𝒄𝟏𝒈 𝒏 ≤ 𝑻 𝒏 ≤ 𝒄𝟐𝒈(𝒏)}

𝑶记号(渐进上界)

定义:

  • 对于给定的函数𝒈(𝒏),𝑶(𝒈(𝒏))表示以下函数的集合: 𝑶 𝒈 𝒏 = {𝑻 𝒏 : ∃ 𝒄, 𝒏𝟎 > 𝟎, 使得∀ 𝒏 ≥ 𝒏𝟎, 𝟎 ≤ 𝑻 𝒏 ≤ 𝒄𝒈 𝒏 }

𝛀记号(渐进下界)

定义:

  • 对于给定的函数𝒈(𝒏),𝛀(𝒈(𝒏))表示以下函数的集合: 𝛀 𝒈 𝒏 = {𝑻 𝒏 : ∃ 𝒄, 𝒏𝟎 > 𝟎, 使得∀ 𝒏 ≥ 𝒏𝟎, 𝟎 ≤ 𝒄𝒈 𝒏 ≤ 𝑻 𝒏 }

4.3.算法分析的实例

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星球奋斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值