算法的概念

算法:一个有计算步骤构成的序列,可以将一组输入值转换成相应的输出值。或可以用例解决一个明确的问题。
问题:输入及相应输出的描述:

算法的特点:确定性、可行性、输入和输出及有穷性。

正确的算法;停机并给出符合问题的定义的输出。

研究算法的基本意义

算法涉及到解决问题的:正确性、可行性以及效率。

以效率为例:对1M数据进行排序

算法与其他技术的关系

硬件设计——布线算法

图形界面——图形生成、处理等

面向对象——编译器设计

局域网和广域网——冲突避免、路由、交换

算法无处不在。

算法设计方法简介

增量式

逐步求解的过程,如插入排序

思考题:

给定一个整数数组A,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入:[-2,1,-3,4,-1,2,1,-5,4]

输出:6
解释:连续子数组 | [4,-1,2,1] 的和最大,为6。

 分治策略:一归并排序为例

归并过程示意图:

伪码:

1: n1←q − p + 1
2: n2←r − q
3: create arrays L[1 · · · n1 + 1] and R[1 · · · n2 + 1]
4: for i←1 to n1 do
5: L[i]←A[p + i − 1]
6: end for
7: for j←1 to n2 do
8: R[j]←A[q + j]
9: end for
10: L[n1 + 1]←∞
11: R[n2 + 1]←∞
12: i←1
13: j←1
14: for k←p to r do
15: if L[i] ≤ R[j] then
16: A[k]←L[i]
17: i←i + 1
18: else
19: A[k]←R[j]
20: j←j + 1
21: end if
22: end for
23: if p < r then
24: q←b p+r 2 c
25: MERGE-SORT(A, p, q)
26: MERGE-SORT(A, q + 1, r)
27: MERGE(A, p, q, r)
28: end if

动态规划:

一种强有力的技术;

从小的子问题的解逐步计算出大问题的解;

计算过程通过动态填表实现;

贪心策略:

最常用的启发策略;

但常常"贪心"不能保证得到好的结果

有些问题满足一些特定性质,可以保证"贪心"一定可以产生最好的结果。

搜索

几乎是通用的办法;

不过开销巨大

循环不变性法

算法正确性分析循环是关键、

以插入排序正确性分析:

L emma 1
在每次循环开始时(第j步) ,A[1,j- 1]是有序的。
Proof.
初始时: A[1,j- 1]中只有一个数,显然成立。
保持性:在循环迭代开始前成立,迭代中,while循环找到正确位
置插入A[j]。所以,这步迭代后命题仍成立。
终止时:将循环退出时的j值带人引理,得到插入排序的正确性。

分析算法,归纳出循环不变性(循环迭代过程,始终成立的命
题)。
 Initialization:在第一次循环开始前不变性是满足的。
 Maintenance:如果在某次迭代前不变性满足,在这次迭代后也
满足不变性。
 Termination:循环结束后,不变性可以提供程序正确性的有用信
息。
例2,归并过程的正确性
Lemma 2
在MERGE中,第14步循环每次开始时,有Ap, k―1]是有序的;

Alp, k一1]是最小的k 一 p个元素;

L[i]是L中待合并的元素中最小的;

R[j]是R中待合并的元素中最小的。

Initialization: k = p,i= 1,j = 1,显然成立。o Maintenance:若L[团]≤R[i],则

L[i]是所有剩下的元素中最小的;

而A[p….k-1]中的元素均大于等于L[i],因此。A[p…k]是所有元素中最小的k 一p+1个元素;

由于L中的数是排好序的,因此L[+1]将是L中剩下元素中最小的;

R[i]仍然是R中最小的。

若L[团]>R[i],可以进行类似讨论。

Termination:循环结束后,k=r+1,代入不变性1,得A[p…r]有序。

算法设计与分析——算法基础初步了解相关推荐

  1. 算法设计与分析——算法学基础(三):渐进记号

    分类目录:<算法设计与分析>总目录 相关文章: 算法学基础(一):算法学概述 算法学基础(二):分析算法 算法学基础(三):渐进记号 第<算法学基础(二):分析算法>中定义了算 ...

  2. 算法设计与分析——算法思想总结

    算法设计与分析 1.分治法 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同.递归的解这些子问题,然后将各子问题的解合并得到原问题的解. 分治法所能解 ...

  3. 计算机算法设计与分析——算法引论

    1.1 算法与程序 计算机算法 通俗定义:用计算机求解问题的方法或过程. 正式定义:算法是满足下述性质的 指令序列: 输入:有零个或多个外部量作为算法的输入 输出:至少产生一个量作为输出 确定性:组成 ...

  4. 哈工大威海算法设计与分析_计算机算法设计与分析第一章 算法概述

    晓强Deep Learning的读书分享会,先从这里开始,从大学开始.大家好,我是晓强,计算机科学与技术专业研究生在读.我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向 ...

  5. 杭电研究生-算法设计与分析-期末宝典

    视频推荐 MOOC青岛大学的算法设计与分析 代码实现(Java) 计算机算法设计与分析 算法实现题 源码 Java 重点(翻书找答案-第四版) 往年试卷 ​

  6. 计算机算法设计与分析读后感,算法设计与分析基础经典读后感有感

    <算法设计与分析基础>是一本由Anany levitin著作,清华大学出版社出版的胶版纸图书,本书定价:49.00元,页数:409,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助 ...

  7. 第一章 算法设计与分析基础知识

    系列文章目录 第一章 算法设计与分析基础知识 第二章 算法的分治策略 第三章 算法的动态规划 第四章 算法的贪心法 -- @[TOC](这里写目录标题) # 一级目录 ## 二级目录 ### 三级目录 ...

  8. 算法设计与分析基础知识

    一.算法设计基础 算法是(algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列. 算法的五个特性: 输入:一个算法可以有零个或多个输入. 输出:一个算法有一个输出或多个输出. 有穷性( ...

  9. 算法设计与分析(电子科技大学)(上)算法基础和贪心算法

    算法分析与设计 引论 (1)理解算法和程序的差别 (2)理解判断问题和优化问题这两类计算问题 1.理解指数增长的规模 2.理解渐进表达式 掌握渐进符号Ο.Θ.Ω的含义,能判断一个函数属于哪个渐近增长阶 ...

最新文章

  1. Latex中设置字体颜色
  2. 怎么把视频里的音乐提取出来
  3. 【Python】列表 list 添加元素的几种方法
  4. 玩转Linux必备知识(二)
  5. wait和notify的理解与使用
  6. 初识react(四) react中异步解决方案之 redux-saga
  7. 哪些事是你当了大学老师之后才知道的?
  8. law是什么的缩写_Lawyer和Attorney 有什么不同?
  9. python——Web服务开发(二)分布式缓存
  10. JS控制文字只显示两行,超出部分显示省略号
  11. php 当前时间转换,php时间转换
  12. CCF201403-3 命令行选项(100分)
  13. 参数利用SpringMVC构建REST接口:第七篇 控制层实现
  14. 如果Linux从未出现,我们的生活会变成怎样?
  15. B站韩顺平版Linux学习笔记(很全啊!)
  16. 优秀的前端开发工程师需要哪些技能?
  17. Packetfence 开源网络准入系统
  18. OPPO云VPC网络实践
  19. 树莓派连接WiFi连不上
  20. 你了解常见电子原件的识别吗?

热门文章

  1. 雅思等出国留学成绩要求一知半解?戳这里
  2. 挖掘视频网站【优酷】上被截断的视频的地址--001
  3. PaddleOCR .NET 识别图片中文字
  4. 细数饿了么开源的前端项目及实践
  5. windows切换窗口,取消edge窗口为多个
  6. python 爬虫 第一周:学会爬取网页信息
  7. html表格去除间距,table 去掉 td之间间距
  8. MySQL忘记root密码解决方案
  9. 全国计算机二级算国奖吗,如何区分竞赛证书的等级和含金量?(太多人傻傻分不清国奖、省奖、市奖)...
  10. KCL v0.4.4 发布 - 自定义 YAML Manifests 输出以及 Python SDK