【笔记】第1章 绪论

article/2025/9/30 8:15:04

A. 计算

一、计算

  1. 计算
    · 对象:规律,技巧
    · 目标:高效,低耗
  2. computer science – computing science
  3. 例子
    · 绳索计算机:勾股定理找垂线
    · 尺规计算机:等分点—子程序

二、算法

1. 算法

  1. 计算 = 信息处理 = 借助某种工具,遵照一定规则,以明确而机械的形式进行
  2. 计算模型 = 计算机 = 信息处理工具
  3. 算法,即特定计算模型下,旨在解决特定问题的指令序列
    · 输入:待处理的信息(问题)
    · 输出:经处理的信息(答案)
    · 正确性
    · 确定性:任一算法都可以描述为一个由基本操作组成的序列
    · 可行性:每一基本操作都可实现,且在常数时间内完成
    · 有穷性

2. 有穷性

Hailstone
在这里插入图片描述

3. 好算法

  1. 特性:正确、健壮、可读、效率
  2. Algorithms + Data Structures = Programs
  3. (Algorithms + Data Structures)* Efficiency = Computation

三、作业

  1. Hailstone问题(又名3n+1问题)中Hailstone(n)的计算程序是:不能确定是否存在n,使程序无法终止
  2. 判断一个算法是否是一个“好算法”,最重要的一条性质是:efficiency 效率

B. 计算模型

一、 算法

1. 性能测度:measure

  • 引入理想、统一、分层次的尺度
  • 运用该尺度,以测量DSA的性质

2. 问题规模:划分等价类

  1. 算法分析的两个方面:正确、成本(运行时间 + 所需存储空间)
  2. TA§ = 算法A求解问题实例P的计算成本
  3. 归纳、概括 —— 划分等价类

3. 最坏情况

  1. 令TA(n) = 用算法A求解某一问题为n的实例,所需的计算成本
  2. T(n) = max { T§ | |p|=n}

4. 理想模型

  1. 不同的算法:规模、类型;同一算法:不同程序员、语言、编译器、体系结构、操作系统等
  2. 关键:抽象出一个理想的平台或模型

二、图灵机

在这里插入图片描述

  • 构成部件: Tape、 Alphabet、Head、State状态
  • 转换函数: Transition Function: (q, c; d, L/R, p)

三、RAM模型

  1. RAM(Random Access Machine)
    T(n) = 算法为求解规模为n的问题,所需执行的基本操作次数
  2. 例子Floor Division
    · 时间成本:各条指令执行次数之总和
    · 能够客观度量算法的执行时间

四、作业

  1. 以下哪项不是图灵机的组成要件?tape of finite length 有限长的纸带(作为一个理想计算模型,图灵机的纸带是两端无线延伸的无限长纸带)
  2. RAM模型与图灵机模型的区别在于图灵机的存储空间无限,而RAM的存储空间有限。False 错(RAM模型中寄存器的总数没有限制,它与图灵机是等价的)

C. 渐进复杂度

一、渐进分析-Big-O 记号

  1. 问题规模足够大之后,计算成本的增长趋势
  2. Big-O notation
    在这里插入图片描述

二、多项式

1. 求解问图

易解问题:线性(linear function):所有O(n)类函数

  1. constant O(1):不含转向(循环、调用、递归等),必顺序执行
  2. poly-log O(log c n) = O(n c),c>0:复杂度无限接近于常数,对数底数、常底数、常数次幂无所谓
  3. polynomial O(n c):多项式aknk + ak-1nk-1 + …… + a22 + a1n + a0 = O(nk), ak > 0
    难解问题:指数
  4. exponential O(2n):成本增长极快,从O(n c) 到 O(2n),是从有效增长到无效增长的分水岭

2. 增长速度

在这里插入图片描述

3. 层次级别

在这里插入图片描述

三、作业

  1. 在大O记号的意义下,以下哪一项与O(m3)相等?(m不是常数) O(m3 + 2000n2 + 1000n)

D. 复杂度分析

一、级数

1. 算法分析

  • 主要任务:正确性(不变性 * 单调性) + 复杂度
  • 复杂度分析的主要方法:
    · 迭代:级数求和
    · 递归: 递归跟踪 + 递推方程
    · 实用:猜测 + 验证

2. 级数

  1. 算术级数:与末项平方同阶
  2. 幂方级数:比幂次高出一阶
  3. 几何级数:与末项同阶
  4. 收敛级数:O(1)
  5. 不收敛但有限:
    在这里插入图片描述

二、 迭代

三、正确性证明

以冒泡排序为例:

  1. 不变性:经k轮扫描交换后,最大的k个元素必然就位
  2. 单调性:经k轮扫描交换后,问题规模缩减至n-k
  3. 正确性:经至多n轮扫描后,算法必然终止,且能给出正确解答

四、封底估算(Back-Of-Envelope Calculation)

在这里插入图片描述

五、作业

  1. Which of the following equations is wrong? 下列对应关系中错误的是:1+ 1/2 +1/3 + …… + 1/n = O(nlogn) (正确O(logn))
  2. x=n; y=1; while( x >= (y-1)*(y+1)) y++;The complexity of the program above is 以上程序的时间复杂度为:不大于n的完全平方根加1的最大整数。
  3. True or false: In bubble sort, the size of the problem is reduced to k after k rounds of sweep & swap.判断:经过k轮扫描交换后,起泡排序程序会将问题规模缩减至k。 False错(n-k)

E. 迭代与递归

迭代乃人工,递归方神通

一、减而治之Decrease-and-conquer

在这里插入图片描述

二、递归跟踪(recursion trace)

  • 算法时间:检查每个递归实例,累计所需时间(调用语句本身,计入对应的子例)
  • 线性递归:Linear Recursion —— O(n) T(n)=O(1)+n=O(n)
  • 数组倒置:Reverse
    在这里插入图片描述

三、分而治之Divide-and-conquer

在这里插入图片描述

四、大师定理/主定理/Master Theorem在这里插入图片描述

五、作业

1.True or false: To apply decrease-and-conquer, we divide the original problem into two degenerated sub-problems, solve them, and merge their solutions. 判断:减而治之的思想是:将问题划分为两个平凡的子问题,分别求解子问题,来得到原问题的解 False错
2. Li Lei and Han Meimei have different opinions regarding the linear time complexity in the video lecture.对于视频中线性递归的时间复杂度,A、B两位同学有不同的看法。Li Lei aggrees to the video, the complexity is O(n) because there are n instances each requiring O(1) execution time. A同学赞同视频中的算法,由于单个递归实例需要O(1)时间完成,共有n个实例,所以整个算法的复杂度是O(n)However, Han Meimei believes the time for sum(A,n) to be O(n) instead of O(1), since it’s still executing even when calling sum(A,n-1), leading to a total time complexity of (. You agree with 但B同学认为,当sum(A,n)函数中调用sum(A,n-1)时,sum(A,n)仍在执行,因此sum(A,n)的完成时间不是O(1)而是O(n),依此计算,整个算法的复杂度应该为()。请问哪位同学对了? Li Lei A同学
3. In the video lecture we see a comment in the code: “Two base cases are required”. What does it refer to? 视频里代码注释中“需要两个递归基”的含义是 The sequence of recursive callls is terminated when the problem size is reduced to either 0 or 1. 在问题规模缩减为0或1时,停止递归
4. 判断:用分而治之的思想来解决长度为n的数组的求和问题(n足够大),递归实例的数目会比用减而治之的方法少。 错

F. 动态规划

一、fibonacci数

  1. 递归版fibonacci数低效根源:各递归实例均被大量重复地调用
  2. 迭代
    · memoization(制表备查)
    · 颠倒计算方法:自底向上递归

二、LCS(Longest Common Sbusequence)最长公共子序列

  • 递归:最好O(n+m); 最差O(2n)
    1. 递归基:若n=-1或m=-1,则取做空序列
    2. 减而治之:若A[n] = ‘X’ = B[m],则LCS(n-1, m-1)+‘X’
    3. 分而治之:A[n] ≠ B[m],则LCS(n, m-1)与LCS(n-1, m)中取更长者
  • 动态规划—迭代:O(n*m)
  • 单调性:每经过一次比对,至少一个序列的长度缩短一个单位

三、作业

  1. The naive way of computing fib(n) recursively leads to a time complexity of 直接用定义以递归的方式计算fib(n)的时间复杂度是:O(2n)
  2. With a regular computer, computing fib(100) naively using recursion would cost (no need to consider overflow). 以现在普通计算机的速度,直接用定义以递归的方式计算fib(100)需要多少时间(不考虑溢出):much longer than your lifetime. 这辈子看不到啦
  3. For the staircase problem in the video lecture, how many different ways can get you from the first step to the eighth. 对于视频中的上台阶问题(从第一层开始),上到第8层共有多少种不同的走法:34
  4. The time and space complexities for computing fib(n) with dynamic programming are 用动态规划计算fib(n)的时间、空间复杂度分别为:θ(n),θ(1)
  5. The length of the LCS between “program” and “algorithm” is program 和 algorithm的LCS长度为:3
  6. LCS(x,y) is defined to be the length of the LCS between strings x and y. LCS(“program”, “algorithm”) = LCS(x,y)表示字符串x,y最长公共子序列长度,则LCS(“program”, “algorithm”)= LCS(“progra”, “algorith”) + 1
  7. Checkout the Demo in the video lecture (the download link is on the right side of the “Course” page, or in 01-f-6). Which tool was used to write the demo?下载并使用视频中的Demo(下载链接在“课程信息”右侧,01-f-6里也有),它是用什么做的?MS Excel
  8. Computing the LCS using dynamic programming leads to a time complexity of (m and n are the lengths of the input strings) 用动态规划求解输入序列长度分别为m,n的LCS问题,时间复杂度为:θ(m*n)

XA. 局限(缓存)

一、就地循环移位:

  1. 蛮力版O(n*k):反复以1为间距循环佐移
  2. 迭代版O(n):同余类(考虑是否互素)
  3. 倒置版O(3n):cache连续访问

二、作业

  1. 如下图
    在这里插入图片描述
  2. Which of the following functions grows fastest asymptotically?下列函数渐进增长速度最快的是:n/log2(n)
  3. . Given the following three functions: 以下是三个函数:Their time complexities are: 它们的时间复杂度分别为:在这里插入图片描述
  4. The following recursive function is for reversing array A[lo, hi]以下递归函数实现数组A[lo, hi]的倒置:What is the time complexity of reverse(A, 0, n-1), for reversing an array of length n?调用reverse(A, 0, n-1)以倒置长度为n的数组,算法的时间复杂度为:
    在这里插入图片描述
  5. V={11, 23, 19, 7, 17, 5, 3, 13, 2, 29} When sorting V using bubble sort, what is the value of V[8] after two rounds of sweep & swap?对V进行起泡排序,两趟扫描交换后V[8] = 23

http://chatgpt.dhexx.cn/article/YfJMiuFM.shtml

相关文章

第1章 NumPy基础

为何第1章介绍NumPy基础?在机器学习和深度学习中,图像、声音、文本等首先要数字化,如何实现数字化?数字化后如何处理?这些都涉及NumPy。NumPy是数据科学的通用语言,它是科学计算、矩阵运算、深度学习的基石…

第1章——初识MySQL

初识MySQL 文章目录 初识MySQL1.MySQL的概述1.1 MySQL的概念1.2 MySQL的特点1.3 相关知识 2.MySQL的初步使用(基于黑窗口)2.1 配置Path环境变量2.2 登录MySQL服务器(1)MySQL客户端方式(2)DOS命令方式 2.3 常…

复习javascript第1章

JavaScript 是全球最流行的编程语言。 JavaScript 是属于 Web 的编程语言。 JavaScript 很容易学习。 JavaScript 能够改变 HTML 内容 getElementById() 是多个 JavaScript HTML 方法之一。 本例使用该方法来“查找” id"demo" 的 HTML 元素,并把元素…

【NLP】第1章 什么是Transformers?

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

第1章 Python 顺序结构

文章目录 Educoder—第1章 Python 顺序结构第1关:Python顺序结构之无输入求多边形的面积第2关:Python顺序结构之无输入求平抛小球与抛出点之间的距离第3关:Python顺序结构之无输入求星期几第4关:Python顺序结构之有输入格式化输出…

【Word/word2007】将标题第1章改成第一章

问题:设置多级列表没有其他格式选的解决办法和带来的插入图注解的问题,将标题第1章改成第一章的问题其他方案。 按照百度搜索的方法设置第一章,可以是没有相应的样式可以选。 那就换到编号选项 设置新的编号值 先选是 然就是变得很丑 这时打开…

python教程第1章

python教程第1章 (1)python(2)IDEIDE是什么安装IDEVSCode第一步第二步第四步插件 海龟编辑器第一步第二步 (3)安装python下载安装包安装 (1)python 为什么python是一个成功的语言呢?正是因为它有非常强大的IDE。 (2)IDE IDE是什么 IDE是三个英文单词的缩写&…

第1章 介绍

介绍 正如业界众所周知的那样,28纳米及以下节点的设计复杂性正在爆炸式增长。小尺寸要求和高性能,低功耗和小面积的相互矛盾的要求导致了如此复杂的设计架构。多核,多线程和功耗,性能和面积(PPA)需求加剧了…

第1章 Python基础

目录 0. Jupyter Notebook简介 0.1 Jupyter Notebook简介及启动 0.1.1 Jupyter Notebook简介0.1.2 Jupyter Notebook安装与启动0.2 Jupyter Notebook里面的最常用的操作: 0.2.1 更改文件名0.2.2 模式切换0.2.3 命令模式快捷键0.2.4 查询帮助1. Python基础语法 1.1 编…

第1章 实践基础

文章目录 第1章 实践基础1.1 如何运行本书的代码1.1.1 本地运行1.1.1.1 环境准备1.1.1.2 快速安装 1.1.2 AI Studio运行 1.2 张量1.2.1 创建张量1.2.1.1 指定数据创建张量1.2.1.2 指定形状创建1.2.1.3 指定区间创建 1.2.2 张量的属性1.2.2.1 张量的形状1.2.2.2 形状的改变1.2.2…

第1章 Nginx简介

基于 Nginx版本 1.14.2 ,Tomcat版本 9.0.0 演示 第1章 Nginx简介 1.1 Nginx发展介绍 Nginx (engine x) 是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器。 Nginx 特点是占有内存少,并发处理能力…

第1章 多线程基础

第1章 多线程基础 1.1.2 线程与进程的关系 进程可以看成是线程的容器,而线程又可以看成是进程中的执行路径。 1.2 多线程启动 线程有两种启动方式:实现Runnable接口;继承Thread类并重写run()方法。 执行进程中的任务时才会产生线程&a…

第1章 Rust安装

Rust是一门安全的语言,最近也加入到Linux内核中,因此后续这门语言会越来越流行,所以准备学习下,本篇介绍Rust在Window平台上的安装过程。 目录 安装步骤 1.到官网下载安装包 2.搭建 Visual Studio Code 开发环境 安装步骤 1.…

第1章 概述

第一章 概述 考试范围: 1.1-1.10 考试内容: 章节后的Review Terms(名词基本都在课文中) 考试题型: 综合题 Review Terms Database-management system (DBMS) :A collection of interrelated data and a …

图书馆预约占座管理系统项目源码+文档+jsp+ssm+mysql

【项目功能描述】 【源码下载】 图书馆预约占座管理系统的开发技术为jspssmmysql,前端技术为jquery easyui框架,后台用的ssm(spring、springMVC、mybaits)框架,主要实现的功能有:用户管理、菜单管理、角色…

图书馆座位预约小程序系统设计与实现

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序预约订座小程序,前台用户使用小程序,后台管理使用JavaMysql开发,后台使用了springboot框架;通过后台添加座位类型、座位号,用户通过…

【计算机毕业设计】基于微信小程序的图书馆座位预约系统

毕设帮助、源码交流及技术指导,见文末。 图书馆作为高校的学习宝地,有着不可替代的地位。但是在信息化时代,传统模式下的图书馆管理并不能满足用户需求。为解决图书馆学生占座问题严重、座位资源紧张的问题,设计了图书馆座位预约系统&#xf…

学校图书馆管理系统

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,学校图书馆管理系统当然也不能排除在外。学校图书馆管理系统是以实际运用为开发背景,运用软件工程开发方法&…

基于javaweb+SpringBoot+JPA图书馆座位占座预约管理系统(管理员、老师、学生)

基于javawebSpringBootJPA图书馆座位占座预约管理系统(管理员、老师、学生) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 /*** 修改密码页面** return*…

基于SSM的图书馆座位预约管理系统占座系统-java图书馆座位预约管理系统占座系统...

基于SSM的图书馆座位预约管理系统占座系统-java图书馆座位预约管理系统占座系统 1.包含源程序,数据库脚本。代码和数据库脚本都有详细注释。2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善开发环境:Eclipse ,MYSQL,JDK1.7,Tomcat 7涉及技术点:MVC模式、SpringMvc、…