《算法设计与分析(第4版)》笔记——第 1 章 算法入门

news2024/12/22 6:01:07

现在跟的是 b站黑马 的视频课,还是这个好哇

2023新版数据结构与算法Java视频教程(上篇)

2023新版数据结构与算法Java视频教程(下篇)


之前跟的是 青岛大学 张公敬教授 的《算法设计与分析》(做了笔记就发出来吧)

mooc:算法设计与分析_青岛大学_中国大学Mooc(慕课)

b站:算法设计与分析MOOC-青岛大学-张公敬教授

用的是 王晓东的《计算机算法设计与分析》 ,虽然书名不同,但是里面的内容和算法是差不多的。

个人觉得应付专业课学前四章就够了,把一些经典的入门算法题刷一刷记下来就够用了。

第 1 章 算法入门

1.1 算法概论

1.2 求两个正整数的最大公约数的 3 种算法

计算两个正整数 m , n 的最大公约数

1.2.1 欧几里德算法 gcd(m,n)

其中 m > n ,其递归定义为:

gcd(m,n) = m , n=0

gcd( n , m mod n ) , n>0

gcd(60,24)

gcd(60,24) = 
∵ 60 / 24 = 2 余 12 ∴ m = 24 n = 12
gcd(24,12) = 
∵ 24 / 12 = 2 余 0 ∴ m = 12 n = 0
gcd(12,0) = 12
自然语言描述

第一步:如果 n = 0,返回 m 的值作为结果,同时过程结束;否则,进入 第二步。

第二步:用 n 去除 m ,将余数赋给 r 。

第三步:将 n 的值赋给 m ,将 r 的值赋给 n ,返回 第一步。

伪代码描述

算法 Euclid(m,n)

//使用欧几里德算法计算 gcd(m,n)

//输入:两个不全为零的非负整数 m,n

//输出:m,n 的最大公约数

while n <> o dor

​ r ← m mod n

​ m ← n

​ n ← r

return m

Java语言描述

算法 Euclid(m,n)

//使用欧几里德算法计算 gcd(m,n)

//输入:两个不全为零的非负整数 m,n

//输出:m,n 的最大公约数

//使用欧几里德算法计算 gcd(m,n)
//输入:两个不全为零的非负整数 m,n
//输出:m,n 的最大公约数
public static int gcd(int m,int n) {
	// 第一种写法
    int r;
    while(n != 0) {
    	r = m % n;
    	m = n;
    	n = r;
    }
    return m;
    
    // 第二种写法
	// if(n == 0) return m;
	// return gcd(n, m%n);
}
其他描述方式
  • 流程图
  • N-S图
  • 等等
  • 各种描述方法都有一定的优缺点

1.2.2 连续整数检测算法

算法思想

基于最大公约数的定义:同时整除两个整数的最大整数

显然,不会大于两数较小者。

故令: t = min{m , n}

用 t 除 m ,n ,若除尽, t 即最大公约数;

否则令:= t - 1 ,继续尝试。

gcd(60,24)

∵ t = 24 无法同时除尽60,24
∴ t = 23
∵ t = 23 无法同时除尽60,24
∴ t = 22
······
∵ t = 12 无法同时除尽60,24
∴ 返回 t 的值

自然语言描述

第一步:将 min{m,n} 的值赋给 t 。

第二步:m 除以 t ,如果余数为 0 ,进入第三步;否则,进入第四步。

第三步:n 除以 t ,如果余数为 0 ,返回 t 值作为结果;否则,进入第四步。

第四步:将 t 值减 1 。返回第二步。

1.2.3 因式分解

思路

把 2···n 之间的所有素数找出来,逐个逐个测试出 m , n 中包含的公共素因子,将公共的素因子相乘就得到最大公约数。

∵ 60 = 2 x 2 x 3 x 5
   24 = 2 x 2 x 2 x 3
∴ gcd(60,24) = 2 x 2 x 3 = 12

新问题:如何快速找出 2···n 之间的所有素数?

埃拉托色尼筛算法

算法思想

  • 首先初始化一个 2~n 的连续序列,作候选质数。
  • 第一个循环消去 2 的倍数,
  • 然后,指向序列的下一个数字 3 ,消去其倍数,
  • 接下来指向 5 ,消去其倍数,
  • 按此方法不断做下去,直到序列中没有可消元素

小结

本节主要内容

  1. 算法的定义与性质
  2. 解决问题的流程
  3. 以求最大公约数为例了解算法的描述方法
  4. 以求最大公约数为例证明算法的正确性

1.3 算法时间复杂度计算方法

请添加图片描述

1.4 算法时间复杂度的表示方法

递归算法

非递归算法

1.5 主定理方法解递归方程

1.5.1 递推方法求递归算法的时间复杂性

请添加图片描述

1.5.2 Master 定理方法求递归算法时间复杂性

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1119780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【德哥说库系列】-RHEL8环境源码编译安装MySQL8.0

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

docker 安装 sftpgo

sftpgo 简介 sftpgo 是一个功能齐全且高度可配置的 SFTP 服务器&#xff0c;具有可选的 HTTP/S、FTP/S 和 WebDAV 支持。支持多种存储后端&#xff1a;本地文件系统、加密本地文件系统、S3&#xff08;兼容&#xff09;对象存储、Google 云存储、Azure Blob 存储、SFTP。 官…

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—广州大学城专场!!!(暨全额奖学金政策)

香港科技大学广州&#xff5c;可持续能源与环境学域博士招生宣讲会—广州大学城专场&#xff01;&#xff01;&#xff01;&#xff08;暨全额奖学金政策&#xff09; “面向未来改变游戏规则的——可持续能源与环境学域” &#xfffd;&#xfffd;&#xfffd;专注于能源环…

【27】c++设计模式——>迭代器模式(遍历双向链表)(2)

//实现双向链表 #pragma once #include<iostream> #include<string> #include<vector> using namespace std;class Iterator; class ForwardIterator; class ReverseIterator;//链表的最小组成部分是一个节点&#xff0c;先实现一个节点 struct Node //c中st…

【每周一测】Java阶段二第五周学习

目录 1、关于static说法不正确的是&#xff1f; 2、以下关于继承的叙述正确的是&#xff08;&#xff09; 3、Restful风格传参用的注解是 4、反射可以访问私有成员变量和方法吗&#xff1f; 5、关于SqlSession的说法&#xff0c;说法正确的是 6、自定义SpringMvc拦截器时…

Web攻防04_MySQL注入_盲注

文章目录 MYSQL-SQL操作-增删改查盲注概念盲注分类盲注语句参考&更多盲注语句/函数 注入条件-数据回显&错误处理PHP开发项目-注入相关条件&#xff1a;基于延时&#xff1a;基于布尔&#xff1a;基于报错&#xff1a; CMS案例-插入报错&删除延时-PHP&MYSQL1、x…

项目管理实战总结(一)-沟通路径问题

前言 那是2021年春节之后&#xff0c;我决定主动申请参与到这个项目&#xff0c;是知道工作强度大、难度大的情况的。有很多的同事是想躲&#xff0c;而我是明知山有虎偏向虎山行。我确定&#xff0c;通过这个项目&#xff0c;一定有我需要的东西。现在项目已经完成了终验专家…

java1.8流的新特性使用

案例描述 今天跟着黑马程序员的视频&#xff0c;完成“瑞吉外卖”项目的菜品信息管理模块的时候&#xff0c;遇到了一个比较陌生的写法 用到了Java8的新特性 stream().map((item) -> {}).collect() List<DishDto> collect records.stream().map((item) -> {DishDt…

数据库基础(一)【MySQL】

文章目录 安装 MySQL修改密码连接和退出数据库服务器使用 systemctl 管理服务器进程配置数据库从文件角度看待数据库查看连接情况 安装 MySQL 这是在 Linux 中安装 MySQL 的教程&#xff1a;Linux 下 MySQL 安装。本系列测试用的 MySQL 版本是 5.7&#xff0c;机器是 centOS7.…

力扣刷题 day51:10-21

1.分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一…

Python在列表中如何对多个参数进行修改

1 问题 在python中经常会使用到列表&#xff0c;列表是常见的一种数据类型。对于一个庞大的列表&#xff0c;要调取列表中的对象&#xff0c;应如何快速准确的调取或快速的调取多个对象&#xff1f; 2 方法 解决问题的步骤采用如下方式&#xff1a; 基本的&#xff0c;已知元素…

【C语言进阶】指针进阶(三)

指针进阶&#xff08;三&#xff09; 9.指针和数组笔试题解析10.指针笔试题 9.指针和数组笔试题解析 数组名的理解 数组名是数组首元素的地址 但是有2个例外&#xff1a; sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;sizeof(数组名)计算的是整个数组的大…

5G投资下降,遥遥领先的主流5G或被运营商抛弃,“假5G”更获青睐

虽然媒体仍然在宣扬5G的诸多领先技术优势&#xff0c;不过需要付钱的运营商已在行动中做出抉择&#xff0c;那就是放缓主流5G的投资&#xff0c;大举投资曾被称为“假5G”的低频5G&#xff0c;现实迫使运营商做出了如此选择。 媒体披露的数据指2022年中国的5G投资下滑了2.5%&am…

golang 反射机制

在 go 语言中&#xff0c;实现反射能力的是 reflect包&#xff0c;能够让程序操作不同类型的对象。其中&#xff0c;在反射包中有两个非常重要的 类型和 函数&#xff0c;两个函数分别是&#xff1a; reflect.TypeOfreflect.ValueOf 两个类型是 reflect.Type 和 reflect.Value…

1024程序员博客创作者活动

1024程序员博客创作者活动 参加博客创作者活动&#xff0c;获取创作者荣誉、活动奖品、稿费、涨粉。每到节假日就会出现比较多的活动 常见的博客网站有CSDN、博客园、掘金者、51CTO、简书、慕课笔记、开源中国。 最近1024出现了各种各样的程序员活动&#xff0c;而且活动的奖…

操作系统学习笔记6-文件系统

侵权请联系我&#xff0c;会及时删除的。下面的图片主要是B站UP主的课程中的截图。 课程推荐链接地址&#xff0c;这个课程很好&#xff0c;具体课程在B站。 操作系统 文章目录 1、文件系统的由来-文件的由来2、文件系统的由来-目录的由来3、文件管理逻辑图4、闲聊文件系统5、…

第五届太原理工大学程序设计竞赛新生赛(初赛)题解

第五届太原理工大学程序设计竞赛新生赛&#xff08;初赛&#xff09;题解 时隔半年重做一次&#xff0c;还是有几道不会&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; ⭐️A.饿饿饭饭 题目&#xff1a; &#x1f31f;题解&#xff1a; 很简单&#xff0c;签…

【软考】11.3 需求分析/获取/定义/验证/管理

《软件需求》 需求分类 需求获取 联合需求计划&#xff08;JRP&#xff09;&#xff1a;联合各个关键用户代表、系统分析师、开发团队代表一起讨论需求 需求分析 结构化的需求分析 自顶向下&#xff0c;逐步分解&#xff0c;面向数据 功能模型&#xff08;数据流图&#xff0…

跟随光标圆形文本旋转

今天给大家带来的是光标变成圆形字符串环绕 不多说先上效果图 原理呢,也很简单 就是先把文本 <h2>大威天龙 - 世尊地藏 - 般若诸佛 - 般若巴嘛哄 -</h2>然后使用js将文本处理成每个字符一个span,并且让他们旋转 let text document.querySelector(h2)text.innerH…

详解FAT32文件系统的簇

FAT32文件系统中&#xff0c;簇&#xff08;Cluster&#xff09;是文件分配的基本单位。它是一组连续的扇区&#xff08;通常是硬盘扇区&#xff09;的集合&#xff0c;用于存储文件的数据。以下是关于FAT32簇的一些详细介绍&#xff1a; 簇的大小&#xff1a;簇的大小是FAT32文…