湘潭大学软件工程算法设计与分析考试复习笔记(四)

回顾

前言

现在是晚上十一点,我平时是十一点睡觉的,但是今天确实一天都没有复习这个,我还是想复习一下。所以还是复习一下吧。

现在复习的是程序填空,一空四分,四十分,也就是说十个空。这个这么难,好像老师是说看大家造化了哈哈哈。

第三道大题是算法设计与分析,前面三篇笔记是复习了一下第一道大题,也就是对算法的大概的理解。第三道大题主要是分治法,解决实际问题(上台阶,电梯),分析时间复杂度,求一个序列中特殊性质的元素,数塔求最大的,最小的和,最优路径,tsp 问题,(这个之前不知道是啥问题,现在大概知道了一些,就是图论题)

cpp 复制代码
10+40+xx+15=100

好吧。那就是这样子了,考试重点就是这些了。现在开始复习程序填空。

计划

有个朋友和我说,她先看课件,然后最后再复习程序填空,先有一个框架,感觉确实是这样,那我也先复习后面的那个算法设计比较好。程序填空确实范围比较大。还有一点就是课件上面的代码我得下载下来才能复制里面的内容,之后方便的时候再操作一下。

分治

前面老师画的重点有提到分治解决各种问题,分治,我现在不看课件对这个概念的理解比较浅显:就是把一个比较复杂的问题分解成为很多子问题,一步一步划分,直到划分到我们能够处理,好像听起来很简单,在现实生活中其实非常非常难,因为我们是有感情的人类,我们在分解任务的时候会有情绪,然后会因为各种各样的原因做不到。

概述

有八个小节,容量上面还是比较多的。课件是第二章,我们前面大致复习了一下 4 5 7 这三个章节。复习完第二章,就算真正的复习完一半了,今天是周三,离考试不到一周的时间了。另外有个朋友联系我让我发一些资料给他,哈哈哈,其实我也没有什么资料,和他一样也是慌的一批地准备期末考试,但是就算害怕也要装作无所谓的样子。

递归

按照我的理解就是,最开始给定的 n 是不能直接解决的问题,比如说一开始让造一个火箭,递归就是问能不能造一个火箭头,不能,然后能不能造个啥,不能,...,最后问,能不能帮忙拧一下这个螺丝钉?可以,那就是所谓的递归出口。

递归形式

  • 多变元递归
  • 多步递归
  • 嵌套递归
  • 联立递归

上面这些一个都看不懂,好像也不会考。考应该是考怎么解决实际问题,时间复杂度是多少。看这种复杂的东西真的看不进去。

实例

这页课件有朋友在很早之前就问过我,可惜我看不懂。

常数和系数没搞懂,指数那块感觉是这样推导的。

递归小结

递归的时间复杂度可以看到是指数级别的,在很多情况下都是不可接受的。或者说比较难。

分治基本思想

我就一直感觉什么分治,递归,贪心,动态规划,都很像,它不像那些复杂的数据结构或者图论,完全是一些看不懂的代码,这几个更像是一种内功,就是表现出来非常朴素,但是里面蕴含的思想是非常深刻的。

只看的懂这个,就是画一棵二叉树,根节点是 n-m ,往下一层全是 n-m-1 ,再往下一层全是 n-m-2 ,一直画下去,最后减小到 1 ,分治结束,从 1n-m 一共有 n-m 层,又因为是二叉树,所以时间复杂度是 O(2^(n-m))

棋盘覆盖问题

这个是很经典的递归的问题,很明显我是一直没有学会的那一批,被这种题折磨得痛苦不堪,其实也还好,因为下意识远离这个题了,没有直面它,之前问过老师这个题,给我发了很多条信息,我似懂非懂。oj 或者网上的刷题网站有很多变体,什么贴瓷砖之类的。

后记

复习到这儿,明天再继续复习。

相关推荐
Mike_66613 分钟前
控制1秒30帧的视频频率
算法·音视频
Octopus20771 小时前
【Linux】开发工具(yum)
linux·服务器·笔记·学习
代码欢乐豆2 小时前
第12章小测
软件工程
sjsjs112 小时前
【数据结构-表达式解析】力扣227. 基本计算器 II
数据结构·算法·leetcode
却道天凉_好个秋2 小时前
c++ 栈
开发语言·c++·算法·
Chensay.2 小时前
排序算法(选择排序、直接插入排序、冒泡排序、二路归并排序)(C语言版)
c语言·算法·排序算法·插入排序·冒泡排序
kitesxian2 小时前
Leetcode206.反转链表(HOT100)
数据结构·算法·链表
Wils0nEdwards2 小时前
Leetcode 快乐数
算法·leetcode·职场和发展
橘子遇见BUG3 小时前
算法日记 30 day 动态规划(背包问题)
算法·动态规划
敲代码敲到头发茂密3 小时前
怎么做好白盒测试?
java·数据库·mysql·算法·单元测试·模块测试·测试覆盖率