从程序设计到算法设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
2
种,所以总共有 C
4 5
C 4 A2
2
2
= 60种。
程序设计思路求解:
为了统计所有不同的选派的情况,用week数组统计每天 安排参加公益活动的人数,week[0]表示星期五的人数、 week[1]表示星期六的人数、week[2]表示星期天的人数, week[3]表示不参加公益活动的人数。week[0]~week[3]的初 始值均为0。 设5人分别安排公益活动的星期号为a~e,显然,0≤a~ e≤3。当某人参加某星期号(编号i,0≤i≤3,i=3时表示不 参加任何公益活动)的公益活动时,week[i]增1。
3.2.2 数据处理是有方法的:提炼通用方法
基本的数据处理算法
模 块 化
数据
教学中,突出通用方法的讲解!!! 培养学生归纳的思想。
求递归模型的步骤: (1)对原问题f(s)进行分析,称为“大问题”,假设出 合理的“小问题”f(s’)(与数学归纳法中假设 n=k-1时等式 成立相似); (2)假设f(s’)是可解的,在此基础上确定 f(s)的解,即给 出f(s)与f(s’)之间的关系(与数学归纳法中求证n=k时等式成 立的过程相似); (3)确定一个特定情况(如f(1)或f(0))的解,由此作为 递归出口(与数学归纳法中求证n=1时等式成立相似)。 递归模型 递归算法
void main() { int week[4]={0}; int a,b,c,d,e,count=0; for (a=0;a<=3;a++) { week[a]++; for (b=0;b<=3;b++) { week[b]++; for (c=0;c<=3;c++) { week[c]++; for (d=0;d<=3;d++) 满足条件 { week[d]++; for (e=0;e<=3;e++) { week[e]++; if (week[0]==2 && week[1]==1 && week[2]==1) count++; week[e]--; } week[d]--; } week[c]--; 回溯 } week[b]--; } week[a]--; } printf("count=%d\n",count); }
1.1
计算机科学分支学科的知识领域
AL ━ Algorithms and Complexity AR ━ Architecture and Organization CN ━ Computational Science DS ━ Discrete Structures GV ━ Graphics and Visual Computing HC ━ Human-Computer Interaction IAS ━ Information Assurance and Security IM ━ Information Management IS ━ Intelligent Systems NC ━ Networking and Communications OS ━ Operating Systems PBD ━ Platform-based Development PD ━ Parallel and Distributed Computing PL ━ Programming Languages SDF ━ Software Development Fundamentals SE ━ Software Engineering SF ━ System Fundamentals SP ━ Social and Professional Issues
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
Down;
End;
任务完成
程序2
Init(2,2); for (i=1 To 4)
1 2 3 4 5 6 7
1
2
3
4
5
6
7
8 1 2 3 4 5 6 7
Left; for (i=1 To 5
掌握各种常用的数据结构
基于数据结构的算法设 计,如栈、队列、二叉 树和图算法等。
基于求解策略的算法设 计,如贪心法、分治法、 回溯法、动态规划和分 枝限界法等。
3 3.1 3.2 3.3
相关课程教学中的几点经验
3.1 3.1.1 计算机语言―工具化的理念
定义变量:使用内存(纸张) 运算符:使用CPU(笔)
18 个 知 识 领 域
提示:
1.2 计算机科学分支学科的知识单元
PL ━ Programming Languages
PL/Object-Oriented Programming PL/Functional Programming PL/Event-Driven and Reactive Programming PL/Basic Type Systems PL/Program Representation PL/Language Translation and Execution PL/Syntax Analysis PL/Compiler Semantic Analysis PL/Code Generation PL/Runtime Systems PL/Static Analysis PL/Advanced Programming Constructs PL/Concurrency and Parallelism PL/Type Systems PL/Formal Semantics PL/Language Pragmatics PL/Logic Programming
数 据 结 构
算 法 设 计 与 分 析
Analysis
1.3
知识领域的重要性
1.4
涵盖的学校类型
社 区 大 学
学 院
教 学 型 大 学
研 究 型 大 学
2
从程序设计到算法设计的课程体系
算 法 设 计 与 分 析
进 阶
程 序 设 计 语 言
数 据 结 构
进 阶
基本编程
以数据结构为中 心的算法设计─ 算法设计方法
求单链表中数据结点个数。 设f(L)为单链表中数据结点个数。
程序修改为:
Init(2,7); if !Over Right; if !Over Right; End;
5 6 7 8
为什么需要条件语句?
循环语句
编程:从(2,2)移动到(7,6)
程序1
Init(2,2);
Left; Left; Left; Left; Down; Down; Down; Down;
武汉大学 李春葆
清华大学出版社
2015年5月●青岛
1 2 3
ACM/IEEE-CS计算机科学课程体系2013
从程序设计到算法设计的课程体系 相关课程教学中的几点经验
数据结构课程教学方法及在线教学平台
4
1
ACM/IEEE-CS计算机科学课程体系2013
中国计算机学会和全国高校计算机教育研究 会也组成研究组:CCC2006
示例:从5位同学中选派4位同学在星期五、星期六、 星期天参加公益活动,每人一天,要求星期五有2人参数, 星期六、星期天各有1人参加,则不同的选派方法共有多
少种?
数学思路求解: 从5人中选派4位同学有 C 种,再从选出的4人中选2人
5 4
星期五劳动有 C 种,其余2人在星期六、星期天劳动有 A2
4
⑥ Over:是否超界
⑦ End:结束
控制语句 顺序语句:串行执行(冯·诺依曼体系结构) 条件语句:if/switch 循环语句:while、do-while、for
条件语句
Init(2,7);
1 1 2 3 4 5 6 7 8 1 2 3
Right; Right;
超界
2 3
4
4
5 6 7 8 1 2 3 4 5 6 7 8
应用程序的基本结构
应 用 程 序
用户界面 数据处理
可视化设计(窗体、网页)
算法设计(基本算法、网 络、编译等) DBMS
数据文件
3.2 3.2.1 为什么学习数据结构课程:数据是有结构的
引子:万事万物都是有结构的。
公理1:从任意的一个点到另外一个点作一条 直线是可能的。 公理2:把有限的直线不断循直线延长是可能 的。 公理3:以任一点为圆心和任一距离为半径作 一圆是可能的。 公理4:所有的直角都相等。 公理5:如果一直线与两线相交,且同侧所交 两内角之和小于两直角,则两直线无限延长 后必相交于该侧的一点。
高 级 语 言 程 序 设 计
面 向 对 象 的 程 序 设 计
程 序 设 计 导 论
AL ━ Algorithms and Complexity
AL/Basic Analysis AL/Algorithmic Strategies AL/Fundamental Data Structures and Algorithms AL/Basic Automata, Computability and Complexity AL/Advanced Computational Complexity AL/Advanced Automata Theory and Computability AL/Advanced Data Structures, Algorithms, and
通用算法设 计─算法设 计方法学
程序设计
数据结构
算法设计 与分析
识字
写作文
写文章
2.1
数据结构和程序设计课程的侧重点
程序设计 数据结构 注重数据组织 注重数据处理方法 强调“好程序”的设计
注重变量定义
注重控制流程
强调程序设计
2.2
数据结构和算法设计与分析课程的侧重点
数据结构 算法设计与分析 掌握各种常用的求解策略
程序(大脑)
3.1.2 计算机语言提供的核心元素 示例:机器人环境
1 2 3 4 5 6 7 8
1
2 3 4
1
2 3 4
5
6 7 8 1 2 3 4 5 6 7 8
5
6 7 8
提供的指令
① Init(x,y):初始位置
② Up:上移一个位置 ③ down:下移一个位置 ④ Left:左移一个位置 ⑤ Down:右移一个位置
Down; End;
8
1 2 3 4 5 6 7 8
8
任务完成
为什么要使用循环语句?
3.1.3 数学思路和程序设计思路的关系
数学思维 计算思维
数学思路是人求解问题的过程,而程序设计思路是人 指挥计算机求解问题的过程。前者是人求解问题的方式,
后者是计算机求解问题的方式。
由于计算机的运行速度快,特别适合于求解简单重复 的问题。所以将数学思路转换成设计程序思路时要充分利 用这一特点,从问题求解中提炼出重复的步骤,用计算机 语言中的循环语句加以实现。
递归算法的核心是数据和数据处理的递归性。
种瓜得瓜:递归
数据:D={瓜的集合} 运算:Op={种瓜} 递归性: Op(D) ∈D
第一年种瓜
第n年种瓜
递归:无处不在。 实例1:家谱
ຫໍສະໝຸດ Baidu
实例2:行政区划分
示例:设计不带头结点的单链表的相关递归算法。 f(L):大问题
L
a1
a2
...
an
∧
f(L->next):小问题 把“大问题”转化为若干个相似的“小问题”来求解。 为什么在这里设计单链表的递归算法时不带头结点?
欧 几 里 德 的 《 几 何 原 本 》
公 理 1
公 理 2
公 理 3
公 理 4
公 理 5
平面几何知识体系结构
公理5又称之为平行公理,这个公理衍生出“三角形 内角和等于180度”的定理。 在高斯(F. Gauss,1777年—1855年)的时代,公理 5就备受质疑,俄罗斯数学家罗巴切夫斯基、匈牙利人波 约阐明公理5只是公理系统的一种可能选择,并非必然的 几何真理,也就是“三角形内角和不一定等于180 ”,从 而发现非欧几里得的几何学,即“非欧几何” 。
如微分几何在现代测量学等领 域应用广泛……
公 理 1
公 理 2
公 理 3
公 理 4
公 理 5
数据结构的观点:
逻辑结构 存储结构 程序员视角 操作功能实现 用户视角
数据的逻辑结构类型 线性结构
树形结构
图形结构
在计算机中实现方法
顺序存储结构
链式存储结构 哈希存储结构 索引存储结构
数 据 的 存 储 结 构 类 型
3.1.4 程序设计基本方法
指令1 指令2 …… 指令n
知识点:
变量定义 变量运算 变量的输入和输出
一个工业流程
输入 模块
输出
一个模块
知识点: 参数类型(输入型参数和输出型参数) 从模块输入到输出的运算。
模块1
模块2
模块3
模块
知识点: 模块的划分 模块之间的关系
3.1.5 程序设计涵盖计算机科学的各个分支