当前课程知识点:程序设计基础 >  第三章 逻辑推理与枚举解题 >  程设论道 >  程设论道一

返回《程序设计基础》慕课在线视频课程列表

程设论道一在线视频

程设论道一

下一节:程设论道二

返回《程序设计基础》慕课在线视频列表

程设论道一课程教案、知识点、字幕

我们第三章讲了

逻辑思维解题的一些知识

那有些同学反正就是反应说

它太神奇了 计算机竟然

能够解决逻辑推理的题

那其实这里头就是说明什么

我们计算思维这个算法

真的是很有力量

所以 可以跟同学们多谈谈

什么是算法

其实算法应该说是跟我们

程序设计很紧密相关的概念

所以这一章讲完之后

我觉得在讨论环节里头

来重点探讨这个问题

给学生说一说

让学生理解一下

算法也不是什么

特别高大上的一个词

因为好像觉得

不是计算机系的或者说

计算机系里头很多人是搞竞赛的

算法这个东西

很高大上 很神秘

其实跟大家讲讲

没那么神秘

其实算法应该就是说

也很好理解

他其实就是一系列的这种

对于特定问题的求解的

一系列的指令

这个比较抽象一点

但是它实际上这个定义

比较简单

我们平时自己做事情也是有

一系列的特定的步骤

那我们也可以说是一种算法

生活中其实

(做事情步骤)也就是算法

但是呢 一定要有

很明确的这个步骤

先做什么 后做什么

包括我们说

什么条件下我们做什么

都很明确

不能说你 跑过去

我也不知道做什么

那这个我们至少就没法提炼成

这个计算机的语言去写

这个其实也是跟计算机本身的

能力来决定的

因为它只会做你告诉它

该怎么做的事

你都不知道 那它就更不知道了

所以就是

要有明确的含义的指令

还有 刚才想起来一个笑话

就是跟这个算法有点关系的

原来说 就是举个例子

怎么把大象塞到冰箱里

然后 第一步 把冰箱门打开

然后把大象塞进去

然后把冰箱门关上 这三步

这很明确

但是这里头有一个问题

就是说 你每个步骤得能做到

你那大象能不能塞进去

所以我说 第二个就是

在明确之下 你必须是可实现的

你不能动动嘴巴说

你把它放进去 那不行

在计算机里一样

所以我们的每一步骤

或者要去做什么

你要是能实现 意思就是

你得写成语句

计算机能够执行出结果出来

那既然能执行出结果

那肯定是 还得给它一个时间限制

不能说这个

无限制的执行

有限步骤呗

这个我给数学系的同学

他们数学系(的同学)

很容易理解那种无限的概念

有个极限啊 有个级数啊这种

他觉得列一个公式 写一个无穷点点点

我一样能算出来啊

但是这种人能算出来

你交给计算机 计算机搞不定的

想想也是 计算机在那转

也得耗电呐 也得耗能量啊

你老算老不出来结果

最终就能源耗尽 没了之后

它就算不出来

或者说 我们说 算法

其实它暗含他能解决问题

你要是算不完 那就没解决

或者说 你在我有生之年

解决不了 那这个也不行

华而不实

我们隔壁实验室

是做密码相关研究的

他们就特别有体会

这个密码我要破解

我不是说我破解不出来

你拿枚举法 这样肯定能破解出来

问题是我发现

我枚举我要枚举多少呢

这个算了下时间

我几辈子都算不完的

然后他们就会觉得

这样密码就很安全了

它失去算法的意义了

因为你不能靠它(解决问题)

就是它是能解决 但是人等不及

所以有时候我们觉得

咱们编程序还是有

很强的解决问题的实用主义

的这种思想在里头

从算法来讲 就更是如此

有限的步骤

而且这个有限必须是在

我人能够忍受(范围内) 或者

(就)某种具体的应用来讲

能忍受的

就是你说的 最早的第一台计算机

它算弹道路径 你还没算出来呢

炮就过去了

那个就不行

有限的 然后 必须是明确的

在明确之后还得每一个(步骤)

必须是可以实现的

所以这样的话

才能真正成为一个

可以解决问题的

能够用的算法

具备这样的特点的

我们称之为算法

所以你课上讲的那个

什么谁做的好事啊

那个家伙是嫌疑犯啊

给出来那个东西

就是在有限的步骤

能够找出来

谁是做好事的

谁是嫌疑犯

所以它就是一个

很好的一种算法

然后其实我觉得

我们后面会学到

更多更多的算法

其实大家以后

写程序写多了就会发现

算法其实就是我们

写程序的一些套路

就是照着这个思路

往里一套 这个问题就能搞定

或者说 照这个思路

我一类的问题就能搞得定

你说总结嘛

解题的经验啊 思考的方法

慢慢总结

可能发现一定的普适性

而且这里头 我觉得还有

一个可能要跟学生讲的

就是除了你去学习

掌握这个(算法)之外

这些常见的算法经典算法

其实也可以说是有限的

就是你掌握了几个

那程咬金就三板斧

他不一样很厉害 最后

所以呢 我想我们程序里头

其实在算法层面上

也有一个类似的

有一些经典的 重要的(算法)

掌握之后 就能解决很多很多问题了

所以说 程序设计基础

看起来我们介绍的算法

似乎并不多

但它的的确确是为学生打下了

一个真正解决问题的基础

而且它绝对不是一个

很基本 很初步一个基础

它真的是能管用的

在算法基础上 很多地方

具体的问题去细化 去改变它

甚至说不同算法可以组合

像搭积木一样 这么搭出来

就能那个得到一个新的算法

解决一些新的问题

但是换来换去还是那些

所以我觉得这么来理解比较好

程序设计基础课程列表:

第一章 编程初步

-1.1 基础知识

--1.1.1 什么是程序?什么是语言?

--1.1.2 什么是程序设计?

--1.1.3 计算机发展史

-1.2 买菜问题

--1.2.1 问题描述

--1.2.2 程序的基本结构

-1.3 数学运算

--1.3.1 数学运算符

--1.3.2 数学函数

-1.4 补充说明

--1.4.1 编程环境的下载与安装

--1.4.2 程序基本结构中的含义

--1.4.3 格式与风格

-1.5 总结

--1.5 总结

-程设论道

--程设论道

-师生问答

--师生问答一:怎样学好程序设计

--师生问答二:语言选择

--师生问答三:关于函数

-第一章 编程初步--语法自测

第二章 变量与代数思维

-2.1 关于超级计算器的几点思考

--2.1.1 关于超级计算器的几点思考

-2.2 电子秤模拟 — 背景介绍及需求分析

--2.2.1 电子秤模拟 — 背景介绍及需求分析

-2.3 电子秤模拟 — 代码实现

--2.3.1 电子秤模拟 — 代码实现

-2.4 变量定义与变量类型

--2.4.1 变量定义与变量类型

-2.5 猜数游戏与数据表示

--2.5.1 猜数游戏与数据表示

-2.6 关于变量的讨论

--2.6.1 变量的初始值

--2.6.2 变量类型

--2.6.3 变量内存单元地址

--2.6.4 存“变量地址”的变量——指针

--2.6.5 指针的 读/写 操作

--2.6.6 指针的 加/减 操作

--公告

-2.7 变量体现的计算思维

--2.7.1 变量体现的计算思维

-程设论道

--程设论道

-师生问答

--师生问答

-第二章 变量与代数思维--语法自测

第三章 逻辑推理与枚举解题

-3.1 谁做的好事——语义表示

--3.1.1 谁做的好事——语义表示

-3.2 谁做的好事——真假检查

--3.2.1 谁做的好事——真假检查

-3.3 谁做的好事——循环枚举

--3.3.1 谁做的好事——循环枚举

-3.4 谁是嫌疑犯——多重循环枚举

--3.4.1 谁是嫌疑犯——多重循环枚举

-3.5 谁是嫌疑犯——破案线索表示

--3.5.1 谁是嫌疑犯——破案线索表示

-3.6 谁是嫌疑犯——用二进制枚举

--3.6.1 谁是嫌疑犯——用二进制枚举

-程设论道

--程设论道一

--程设论道二

--程设论道三

-师生问答

--师生问答一:字符与ASCII码表

--师生问答二:其他循环语句、运算符优先级与变量作用域

-第三章 逻辑推理与枚举解题--语法自测

第四章 筛法与查找

-4.1 插花游戏

--4.1.1 问题提出(求素数)

--4.1.2 函数初探

--4.1.3 运行演示

-4.2 筛法

--4.2.1 筛法思路

--4.2.2 数组的定义

--4.2.3 代码翻译

--4.2.4 运行演示

--4.2.5 小朋友数人数

--4.2.6 运行演示

--4.2.7 韩信点兵

-4.3 线性查找

--4.3.1 扑克查找问题

--4.3.2 扑克查找问题代码翻译

--4.3.3 最小值问题

--4.3.4 最小值问题代码翻译

-4.4 折半查找

--4.4.1 提问

--4.4.2 折半查找思路

--4.4.3 折半查找代码翻译

--4.4.4 折半查找运行演示

-4.5 排序问题

--4.5.1 插入排序

--4.5.2 选择排序

--4.5.3 函数写法

--4.5.4 运行演示

-4.6 总结

--4.6.1 总结

-程设论道

--程设论道一:数组与编码思维

--程设论道二:筛法

-师生问答

--师生问答一:函数与面向过程编程

--师生问答二:数组的下标越界

-第四章 筛法与查找--语法自测

第五章 分治思想与递归

-5.1 阶乘

--5.1.1 阶乘问题

--5.1.2 递归解法

--5.1.3 递归小结

-5.2 排序

--5.2.1 归并排序——总体思路

--5.2.2 归并排序——思路分解

--5.2.3 归并排序——代码解说

--5.2.4 快速排序——总体思路

--5.2.5 快速排序——代码解说

--5.2.6 排序总结

-5.3 矩阵填充

--5.3.1 矩阵填充问题

--5.3.2 代码解说

-5.4 分书与八皇后

--5.4.1 问题描述

--5.4.2 问题分析——共性

--5.4.3 问题分析——区别

--5.4.4 解题准备——二维数组

--5.4.5 解题准备——递归设计

--5.4.6 代码解说——分书问题

--5.4.7 代码解说——八皇后问题

-5.5 青蛙过河

--5.5.1 问题描述

--5.5.2 问题分析——简单情况

--5.5.3 问题分析——复杂情况

--5.5.4 问题分析——一般情况

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答一

--师生问答二

-第五章 分治思想与递归--语法自测

第六章 递推与动态规划

-6.1 兔子数列问题

--6.1.1 问题描述

--6.1.2 按大小兔子分别递推

--6.1.3 按总数递推

--6.1.4 不用数组递推

-6.2 分鱼问题

--6.2.1 问题描述

--6.2.2 从A到E递推

--6.2.3 从E到A递推

-6.3 橱窗的插花问题

--6.3.1 问题描述

--6.3.2 题意理解与分析

--6.3.3 用枚举思想解题

--6.3.4 采用递推的优化算法

--6.3.5.1 采用动态规划算法—优化分析

--6.3.5.2 采用动态规划算法—递推代码

--6.3.5.3 采用动态规划算法—计算过程

--6.3.5.4 采用动态规划算法—输出方案

--6.3.6 动态规划总结

-6.4 最长公共子序列问题

--6.4.1 问题描述与理解

--6.4.2 问题分析

--6.4.3.1 动态规划解题(1)

--6.4.3.2 动态规划解题(2)

--6.4.3.3 动态规划代码

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第六章 递推与动态规划--语法自测

第七章 文本数据处理

-7.1 统计记录总数

--7.1.1 问题分析

--7.1.2 读文件操作

-7.2 统计活跃用户数

--7.2.1 问题分析

--7.2.2 字符串

--7.2.3 程序翻译与演示

-7.3 统计在线时长

--7.3.1 问题分析

--7.3.2 结构

--7.3.3 程序翻译与演示

--7.3.4 写文件操作

-7.4 总结

--7.4.1 总结

-程设论道

--程设论道

-师生问答

--师生问答

-第七章 文本数据处理--语法自测

第八章 非文本数据处理

-8.1 将数据组织成链表

--8.1.1 链表的基本概念

--8.1.2 代码讲解

--8.1.3 链表遍历与释放

-8.2 提高链表访问效率 —— 哈希链表

--8.2.1 简单的哈希算法

--8.2.2 算法实现

-8.3 以二进制文件存储链表

--8.3.1 二进制文件的操作方法

--8.3.2 代码讲解

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第八章 非文本数据处理--语法自测

第九章 可配置的程序设计

-9.1 自动售卖程序

--9.1.1 提出问题与初步设计

--9.1.2 细化实现订单处理

--9.1.3 使程序更健壮

-9.2 配制水果信息

--9.2.1 提出问题与设计文件格式

--9.2.2 实现订单处理功能

-9.3 指定界面语言

--9.3.1 提出问题与命令行参数

--9.3.2 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

-第九章 可配置的程序设计--语法自测

程设论道一笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。