MOOC丨算法设计与问题求解大学慕课

本课程以计算机经典问题求解为导向,通用算法思维和编码能力培养为目标,引入ACM国际大学生程序设计竞赛的有益元素,精心安排课程的理论教学和编程实践。本课程学习将帮助学员提高计算思维和程序设计能力,帮助学员应对IT公司的算法笔试/面试或者研究生入学考试的机考/面试。

——课程团队

开课学校:北京交通大学

开课教授:李清勇、张英俊、李公仆、赵宏智、李强、刘铭

课程概述

“软件=算法+数据结构”,算法是软件的灵魂。在信息时代,计算思维是分析复杂工程问题的重要思维方式,计算机则是求解问题的重要工具。本课程以计算机经典问题求解为导向,通用算法思维和编码能力培养为目标,引入ACM国际大学生程序设计竞赛的有益元素,精心安排课程的理论教学和编程实践。

本课程主要讲授计算机问题求解的经典算法设计方法和算法复杂度分析方法,主要内容包括算法复杂度分析,枚举算法,递归与分治策略,动态规划,贪心算法和通用搜索技术。本课程除了强调经典的算法理论和模型,亦兼顾编程实践能力。力图使得学员面对复杂问题时,既能“想到”还能“做到”。

授课目标

课程大纲

第二章枚举算法(大道至简)

2.1基本原理

2.2模糊数字问题

2.3百钱百鸡问题

2.4数组配对问题

2.5绳子切割问题

2.6石头移动问题

2.7小结

枚举算法作业

第三章递归与分治(庖丁解牛)-1

3.1递归基本思想

3.2递归实例

3.3分治基本原理

3.4Master定理

3.5合并排序

递归算法实践

第三章递归与分治(庖丁解牛)-2

3.6逆序对问题

3.7快速排序

3.8最接近点对

3.9乘方运算

3.11小结

矩阵搜索问题

第四章.动态规划(跬步千里)-1

4.1基本原理

4.2矩阵连乘-问题分析

4.3矩阵连乘-算法与实现

4.4矩阵连乘-备忘录方法

4.5多段图最短路径-问题分析

4.6多段图最短路径-算法与实现

编辑距离问题

第四章.动态规划(跬步千里)-2

4.7最长公共子序列-问题分析

4.8最长公共子序列-算法与实现

4.90-1背包-问题分析

4.100-1背包-算法与实现

4.110-1背包-优化方法

4.12最大上升子序列-问题分析

4.13最大上升子序列-算法与实现

4.14小结

收集控的决策问题

第五章.贪心算法(局部寻优)-1

5.1基本原理

5.2活动安排问题-算法与实现

5.3活动安排问题-正确性证明

5.4小数背包问题

5.5哈夫曼编码-算法与实现

5.6哈夫曼编码-正确性证明

5.7单源最短路径-Dijkstra与实现

5.8单源最短路径-正确性证明

数字删除问题

第五章.贪心算法(局部寻优)-2

5.9最小生成树-问题分析

5.10最小生成树-Prim算法与实现

5.11最小生成树-Prim证明

5.12并查集基础

5.13最小生成树-Kruskal算法与实现

5.14最小生成树-Kruskal证明

5.15小结

贪心算法实践

第六章.搜索技术(按图索骥)-1

6.1状态空间图

6.2深度优先搜索

6.3广度优先搜索

6.4回溯算法-原理

6.5回溯算法-实例

搜索算法实践

第六章.搜索技术(按图索骥)-2

6.6分支限界法-原理

6.7分支限界法-实例

6.8启发式搜索-原理

6.9A*算法-原理

6.10启发式搜索-实例

6.11小结

预备知识

参考资料

李清勇.算法设计与问题求解-计算思维培养(第2版),电子工业出版社,2020.

Cormen,T.H.等著,潘金贵等译.算法导论,机械工业出版社,2006.

课程心得

老师讲得十分透彻,将经典算法的核心思想整理出来了并教给学生如何思考、解决问题,真的非常棒!将算法书上的重点深入浅出的讲解了出来,非常适合本科生学习。对于业余爱好来说,本课程也成了难度没那么高,值得一学的课程!

THE END
1.排序算法代码实现(完整可运行代码C++)排序算法代码c++排序算法代码实现(完整可运行代码C++) 插入排序稳定 c++ #include<iostream> #include<vector> usingnamespacestd; intmain(){ vector<int>arr({1,8,2,7,6,5,4,2}); for(inti =1;i < arr.size();i++){ if(arr[i] < arr[i -1]){}https://blog.csdn.net/weixin_61597480/article/details/144108928
2.C++基础代码—20余种数据结构和算法的实现基本上可以分为两大类,一种是关于数据结构和算法的(例如:RBtree,stack),另一种是关于C++语言本身层面的(例如:reference_count,Uncopyable)。这些类,可以在如今C++标准库或者其它C++库(如:boost)中找到类似的实现,实现它们的目的不是想自己造轮子,而是通过实现,来深入的理解到一些更本质的东西。很多时候,人们往往“http://help.louzhutie.cn/?developer/article/2477584
3.精选热点17c.cpp官网版——C++编程教程,深入探讨C++17新特性深圳悦府起火初判因燃气爆炸,小房间|杏儿_手机网易网,渺渺在公车被灌满JING液-公共交通中的意外遭遇渺渺的JING,2型糖尿病能不能喂奶 - 苹果绿养生网乡村剧《抵债的朋友麦子3的背景设定》4K高清手机免费播放 ,97se亚洲国产综合自在线,一本一道久久a久久精品综合,红杏,《长相思》全集-电视剧-免费在线观看同学把我啪啪http://bjfl.org.cn/BYD/sptv/789k0udk_20241219.html
4.C++解决LeetCode1781:所有子字符串的美丽值总和本文详细探讨了LeetCode1781题目“所有子字符串美丽值之和”的两种解法,包括使用前缀和的方法以及在遍历过程中直接计算的方法,提供了详细的C++实现代码。 LeetCode 1781:所有子字符串的美丽值总和 题目链接:LeetCode 1781 一个字符串的美丽值定义为其出现频率最高的字符与出现频率最低的字符之间的差值。 https://www.php1.cn/detail/C--__LeetCode178_63dd2ba6.html
5.php常用的排序算法与二分法查找二分法排序c++二分法排序二分法二分法查找,排序算法:php常用的排序算法与二分法查找:一: 归并排序将两个的有序数列合并成一个有序数列,我们称之为https://m.php.cn/faq/325200.html
6.头歌数据结构与算法课程设计算法与竞赛(第2章)本实训主要设置了三个关卡:第一关介绍了Algorithm中的Min/Max操作;第二关是自定义数据类型结构体下的Min函数应用;第三关讲的是C++模板中的快速排序算法。最后在每个关卡都设置了实例,考察学员对所讲内容的理解和在线编程能力。 第1关:Algorithm模板中的Min/Max应用 https://blog.51cto.com/u_15127526/4186588
7.麦科田医疗2022届校园招聘简章2、熟练掌握一门或多门主流语言(C/C++、JAVA、C#等); 3、熟悉数据结构,了解常用数据结构特性; 4、熟悉常用排序、查找算法优劣; 5、对面向对象编程思想、设计模式应用有较深入的理解; 6、了解操作系统原理。 2.图像算法工程师招聘人数:8人工作地点:深圳 https://whcb.wh.sdu.edu.cn/info/1085/8067.htm
8.孩子学了scratch编程之后,再学什么?(不废话,目前最详细通俗的对于软件编程来说,掌握算法其实是一个孩子学习编程的核心,比语法if else等这些结构更重要。算法是什么? 举个算法里的经典例子:冒泡排序 以上只是编程排序算法其中的一种,光排序算法,就包含以下这么多方法: 简化来说,现在大家思考一个问题:如何在一堆数据中让计算机找到最大值?每一种算法,都包含了一种数据的解决思https://post.smzdm.com/p/amx8orp4/
9.算法I~IV(C++实现)――基础数据结构排序和搜索(第三版)(豆瓣)喜欢读"算法I~IV(C++实现)――基础、数据结构、排序和搜索(第三版)"的人也喜欢 ··· C++算法 8.7 C++ Templates 8.9 C++标准程序库 9.0 算法设计与分析基础 8.7 C++编程思想(第1卷) 8.3 UNIX操作系统设计 8.9 随机算法 6.5 算法基础 8.1 Algorithms in C, Parts 1-4 8.2 C++必知必会https://book.douban.com/subject/1143801/
10.软件设计师知识点100条软件设计师考点整理软件设计师88、常见排序算法对比 89、常见排序算法适用常见对比1 若待排序列的记录数目n较小,可采用直接插入排序和简单选择排序。由于直接插入排序所需的记录移动操作较简单选择排序多,因而当记录本身信息量大时,用简单选择排序方法较好。 若待排记录按关键字基本有序,宜采用直接插入排序或冒泡排序。 当n很大且关键字位数较少时https://www.educity.cn/rk/2213375.html
11.C++快速排序Hello算法(C++版)「快速排序 quick sort」是一种基于分治策略的排序算法,运行高效,应用广泛。快速排序的核心操作是“哨兵划分”,其目标是:选择数组中的某个元素作为“基准数”,将所有小于基准数的元素移到其左侧,而大于基准数的元素移到其右侧。具体来说,哨兵划分的流程如图 11-8 所https://m.w3cschool.cn/hellocpp/hellocpp-lzf13tkf.html
12.c++几种基本的插入排序(图文)C语言这篇文章主要介绍了c++几种基本的插入排序(图文),需要的朋友可以参考下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】 1.插入排序 插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后https://www.jb51.net/article/57742.htm
13.编程学习计划(系列八篇)学习基础语法时,我们可以通过书籍、在线课程、YouTube视频等方式进行学习。3.练习算法编程算法编程是编程学习的重要一环,也是我们将计算机思维用于解决问题的关键。通过练习算法编程,我们可以更加深入地理解编程语言和计算机思维。为了提高算法编程的能力,我们需要练习一些基本算法,例如插入排序、二分查找、动态规划等,而这些https://www.liuxue86.com/a/5151491.html
14.17种编程语言实现排序算法希尔排序覆盖语言:C、C++、C#、Java、Kotlin、Dart、Go、JavaScript(JS)、TypeScript(TS)、ArkTS、swift、PHP。 覆盖平台:安卓(Java、Kotlin)、iOS(SwiftUI)、Flutter(Dart)、Window桌面(C#)、前端(微信小程序、uni-app、vue)、后端(Java、Kotlin、NodeJS、Python、PHP、Go、C、C++)、鸿蒙 https://www.jianshu.com/p/0ccdacd5ab4d
15.编程算法数学之美by免费在线预览全文 编程,算法,程序,软件,语言,C++,计算机,互联网,网络,C语言 数学之美 吴军,Google (谷歌)研究员 数学之美 0. 网页排名算法 1. 统计语言模型 2. 谈谈中文分词 3. 隐含马尔可夫模型在语言处理中的应用 4. 怎样度量信息? 5. 简单之美:布尔代数和搜索引擎的索引 6. 图论和网络爬虫(Web Crawlhttps://max.book118.com/html/2018/0108/147961282.shtm
16.首页洛谷创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验。它拥有在线测题系统、强大的社区、在线学习功能。很多教程内容由各位oiers提供的,内容广泛。无论是初学oi的蒟蒻,还是久经沙场的神犇,均可从中获益,也可以帮助他人,共同进步。是学习noiphttps://www.luogu.com.cn/
17.算法第四版高清中文版pdf第四版 高清中文版 作为算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述。第4版具体给出了每位程序员应知应会的50个算法,提供了实际代码,而且这些Java代码实现采用了模块化的编程风格,读者可以方便地加以改造。本书配套网站提供了本书内容的摘要及https://www.iteye.com/resource/xtldwdfd-10762097
18.快速排序算法递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。 递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 C++版 - 迭代法 https://tool.dreamlikes.cn/algorithm/quicksort
19.C++错误解决:doublefreeorcorruption(out):0x00000000011abe博主最近疯狂的迷恋上了leetcode刷题,想要锻炼脑力和算法思想的,推荐去这个网站上刷题。因为是用c++编写的,而且提交的时候会经常遇到一些报错。比如题目的这个。好了,下面开始解答。 错误信息 double free or corruption (out): 0x00000000011abe70 *** https://cloud.tencent.com/developer/article/1393333