[分章:阅读]《我的第一本算法书》

第一章数据结构

1.链表

1、数据结构之一,线性排列数据,指针链接数据;访问O(n),删除/添加O(1)

2、类似链条。

2.数组

1、线性排列数据,含数据下标(即索引);访问(O1),删除/添加O(n)

3.链表与数组对比

4.栈

1、线性排列数据,后进先出LIFO;最新值O(1),最先值O(n)

2、只需访问最新数据时使用方便。

3、类似杯子

4、算法:深度优先搜索

5.队列

1、线性排列数据,先进先出FIFO;最新值O(n),最先值O(1)

2、类似排队。

3、算法:广度优先搜索

6.哈希表

1、键和值组成的数据,存储在数组中,需要设定数组大小mod;查询O(n)

2、当键重复时,数据冲突,可用方法解决冲突:链地址法、开放地址法等

3、链地址法(见下图1):冲突数据存在链表中,查找时,查键而后顺着链表查询。结合了数组的快速查询和链表的快速增删两种优势。

4、开放地址法(最广泛的方法):多次使用哈希函数或线性探测法等将冲突数据重新分配至数组上的下一个候补地址。

5、算法:哈希函数

7.堆

1、图的树形结构;用于优先队列,可自由添加数据,从最小值桉顺序提取数据;数据存储于结点中;取最小/大值O(1),查询/增删O(logn).。

2、必须子结点>父结点。数据添加时,子结点<父结点,则交换位置,直至所有子结点>父结点。

3、频繁取最小值时,全为O(1)。

4、算法:狄克斯特拉算法。

8.二叉查找树

1、又叫二叉搜索树或二叉排序树;图的树形结构;数据存储在结点中,每个结点最多两个结结点;增删O(logn)。

2、性质:每个结点值>左子树任一结点值;结点值<右子树任一值

3、相当于多个堆的组合。

第二章排序

1.冒泡排序

1、通过不断交换最小值至最左端实现顺序排序;时间O(n^2)。

2.选择排序

1、线性查找最小值,挪至最左端,而后不断重复;时间O(n^2)。

3.插入排序

1、从左边开始比较,依次往右排序;时间O(n^2)。

4.堆排序

1、按降序构建堆而后取出数据;时间O(nlogn)。

2、比冒泡排序、选择排序、插入排序快,但是数据结构比较复杂。

5.归并排序

1、把数据分裂,而后按顺序合并;时间O(nlogn)。

6.快速排序

1、随机选择基准值(pivot),在基准值左右排序;属于分治法,将一个问题分成2个子问题分别求解;O(nlogn)。

2、算法:汉诺塔

第三章数组的查找

1.线性查找

1、按照下标,从头往下找;O(n)。

2.二分查找

1、取中间下标,两边查找;O(logn)。

2、数据必须事先排好序。

第四章图的搜索

1.什么是图

1、结点连接形成的图形;连接顶点的线叫边;

2、加权图:在边加值,值为权重/权。

3、有向图:边加箭头,只可单向;无箭头为无向图,双箭头为双向图。

4、图的作用:基于权重可以解决最短路径问题

2.广度优先搜索

1、对图进行搜索的算法;从起点开始,由近及远搜索。

3.深度优先搜索

1、对图进行搜索的算法;从起点开始,沿着一条路不断往下。

 4.贝尔曼 - 福特算法

1、在加权图指定起点和终点的前提下,求解最短路径问题的算法;O(nm),m为边数。

2、所有边重复计算权重和更新权重

3、有负数权重时,可用该方法。

4.狄克斯特拉算法

1、求解最短路径问题的算法;计算起点到终点的最小权重和;O(n^2),数据结构优化后O(m+nlogn)

2、若有负数权重,则无法得出答案。

3、无负数权重时,相较于贝尔曼 - 福特算法,狄克斯特拉算法效率更高。

5.A*算法

1、求解最短路径问题的算法;先估算一个值,然后计算;

2、常用于游戏中计算敌人追赶玩家时的行动路线。

第五章安全算法

1.安全和算法

1、互联网中不可或缺的安全技术,防止他人窃取数据。

2、传输数据时的四个问题:

1.窃听;

2.假冒;

3.篡改

4.事后否认

3、安全技术:

1.窃取:加密

2.假冒、篡改、事后否认:消息认证码、数字签名

2.加密的基础知识

1、将原数据使用二进制表达,生成一个密钥添加到原数据加密,接收端拿到密钥和原数据二进制数据解密。

3.哈希函数

1、哈希函数可以把给定的数据转换成固定长度的无规律数值

2、特征:数据长度固定不变;同一算法,相同数据输出的哈希值相同;数据相似,哈希值不会相似;数据完全不同,哈希值可能相同(哈希冲突);不可从哈希值得到原数据(输入输出不可逆);

3、哈希函数的实现算法:MD5、SHA-1、SHA-2等;MD5、SHA-1存在隐患;SHA-2应用最广泛。

4、应用:用户密码认证中,因为输入输出不可逆,将密码哈希值存至服务器,客户输入函数后计算哈希值,而后和服务器比对,避免密码被人窃取。

4.共享密钥加密(对称加密)

1、加密数据分类:加密和解密用相同密钥的“共享密钥加密”(也叫对称加密);分别使用不同密钥的“公开密钥加密”。

2、实现算法:凯撒密码、AES、DES、动态口令等

3、缺点:密钥可能会被第三者窃取进而被解密,数据被窃听;密钥数随着人数增多而增多n(n-1)/2。

5.公开密钥加密(非对称加密)

1、加密密钥为公开密钥,解密密钥为私有密钥

2、实现算法:RSA算法、椭圆曲线加密算法等;RSA使用最广泛;

3、缺点:公共密钥被替换后,密钥被篡改,致使数据被窃取(中间人攻击);加密解密耗时长,不适用于频繁使用的数据。

6.混合加密

1、结合共享密钥加密和公开密钥加密;

2、安全性和处理速度都有优势;

3、应用:SSL协议(安全套接层)、TLS协议(传输层安全);

7.迪菲 - 赫尔曼密钥交换

1、通信双方之间安全交换密钥的方法,隐藏密钥数值在公开数值相关的运算中实现密钥安全交换。

2、特征:密钥可呵成但无法分解;可以继续合成新的密钥;密钥合成结果与和合成顺序无关。

8.消息认证码

1、实现认证和检测篡改功能。

2、将共享密钥生成MAC,接受信息时验证MAC是否正确以实现检测篡改功能;

3、MAC的实现算法:HMAC、OMAC、CMAC;HMAC使用最广泛,使用哈希函数实现。

4、缺点:无法确认MAC是谁生成。

9.数字签名

1、实现消息认证码认证、检验篡改、预防事后否认。

2、使用私有密钥生成签名,公开密钥解密签名。

3、实现算法:RSA加密算法

4、缺点:可能会被假冒数字签名

10.数字证书

1、在认证中心申请发行证书,形成包含发送者信息和公开密钥的数字签名。

2、缺点:接收者无法确认公开密钥是否真的来自认真中心。

3、数字证书通过认证中心担保公开密钥的制作者,称为公钥基础设施。

第六章聚类

1.什么是聚类

1、一种算法,实现输入多个数据时,将相似数据分为一组的操作。

2、实现算法:k-means算法、层次聚类算法

2.k-means算法

1、根据事先给定的数据进行聚类。

第七章其他算法

1.欧几里得算法

1、又称辗转相除法,计算两个数的最大公约数。

2.素性测试

1、判断一个自然数是否为素数。

3.网页排名

1、又称佩奇排名,搜索网页时对搜索结果排序的算法。

4.汉诺塔

1、简单易懂的递归算法应用实例。

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

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

相关文章

Ubuntu20.04.3LTS桌面版与Window10双系统并存

Ubuntu20.04.3LTS桌面版与Window10双系统并存 文章目录 Ubuntu20.04.3LTS桌面版与Window10双系统并存1.分区与安装1. 硬盘分区1. 一般用途2. 服务器用 2. 操作系统版本及分区信息3. 安装时创建用户4. 安装后修改root设置用户密码&#xff1a;3. 安装时指定ip4. 设置静态IP 2. 安…

Java线程池七大参数详解和配置(面试重点)

一、corePoolSize核心线程数 二、maximunPoolSize最大线程数 三、keepAliveTime空闲线程存活时间 四、unit空闲线程存活时间的单位 五、workQueue线程工作队列 1、ArrayBlockingQueue FIFO有界阻塞队列 2、LinkedBlockingQueue FIFO无限队列 3、PriorityBlockingQueue V…

【代码随想录】刷题笔记Day54

前言 差单调栈就结束代码随想录一刷啦&#xff0c;回家二刷打算改用python补充进博客&#xff0c;小涛加油&#xff01;&#xff01;&#xff01; 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 双指针法 中心点外扩&#xff0c;注意中心点可能有一个元素可能有两个…

Supervised Contrastive 损失函数详解

有什么不对的及时指出&#xff0c;共同学习进步。(●’◡’●) 有监督对比学习将自监督批量对比方法扩展到完全监督设置&#xff0c;能够有效地利用标签信息。属于同一类的点簇在嵌入空间中被拉到一起&#xff0c;同时将来自不同类的样本簇推开。这种损失显示出对自然损坏很稳…

【Linux C | 进程】进程终止、等待 | exit、_exit、wait、waitpid

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【Kafka】开发实战和Springboot集成kafka

目录 消息的发送与接收生产者消费者 SpringBoot 集成kafka服务端参数配置 消息的发送与接收 生产者 生产者主要的对象有&#xff1a; KafkaProducer &#xff0c; ProducerRecord 。 其中 KafkaProducer 是用于发送消息的类&#xff0c; ProducerRecord 类用于封装Kafka的消息…

仅使用K-M法+Cox比例风险模型就能发二区文章 | SEER公共数据库周报(1.17)

欢迎各位参加本周中山大学著名卫生统计学家方积乾教授公益直播讲座&#xff01; 就在本周三晚&#xff0c;主题为“真实世界研究与RCT研究”&#xff0c;欢迎各位预约参加&#xff01; SEER&#xff08;The Surveillance, Epidemiology, and End Results&#xff09;数据库是由…

回溯算法篇-01:全排列

力扣46&#xff1a;全排列 题目分析 这道题属于上一篇——“回溯算法解题框架与思路”中的 “元素不重复不可复用” 那一类中的 排列类问题。 我们来回顾一下当时是怎么说的&#xff1a; 排列和组合的区别在于&#xff0c;排列对“顺序”有要求。比如 [1,2] 和 [2,1] 是两个不…

柔性数组和C语言内存划分

柔性数组和C语言内存划分 1. 柔性数组1.1 柔性数组的特点&#xff1a;1.2 柔性数组的使用1.3 柔性数组的优势 2. 总结C/C中程序内存区域划分 1. 柔性数组 也许你从来没有听说过柔性数组&#xff08;flexible array)这个概念&#xff0c;但是它确实是存在的。 C99 中&#xff…

力扣740. 删除并获得点数

动态规划 思路&#xff1a; 选择元素 x&#xff0c;获得其点数&#xff0c;删除 x 1 和 x - 1&#xff0c;则其他的 x 的点数也会被获得&#xff1b;可以将数组转换成一个有序 map&#xff0c;key 为 x&#xff0c; value 为对应所有 x 的和&#xff1b;则问题转换成了不能同…

Postman基本使用、测试环境(Environment)配置

文章目录 准备测试项目DemoController测试代码Interceptor模拟拦截配置 Postman模块简单介绍Postman通用环境配置新建环境(Environment)配置环境(Environment)设置域名变量引用域名变量查看请求结果打印 Postman脚本设置变量登录成功后设置全局Auth-Token脚本编写脚本查看conso…

即插即用篇 | UniRepLKNet:用于音频、视频、点云、时间序列和图像识别的通用感知大卷积神经网络 | DRepConv

大卷积神经网络(ConvNets)近来受到了广泛研究关注,但存在两个未解决且需要进一步研究的关键问题。1)现有大卷积神经网络的架构主要遵循传统ConvNets或变压器的设计原则,而针对大卷积神经网络的架构设计仍未得到解决。2)随着变压器在多个领域的主导地位,有待研究ConvNets…

软件设计师——项目管理(一)

&#x1f4d1;前言 本文主要是【项目管理】——软件设计师——项目管理的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…

Databend 开源周报第 129 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持标准流 标…

如何在 Ubuntu 22.04 上安装 Apache Web 服务器

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 如何在 Ubuntu 22.04 上安装 Apache Web 服务器 介绍 Apache HTTP 服务器是世界上使用最广泛的 Web 服务器。它…

模拟器单窗口ip有问题?试试关闭IPV6来解决

目前应该不止雷电9有这个问题了&#xff0c;最早是看到无忧群里在说有这个问题&#xff0c;后面发现很多其他的ip软件也有同样的问题&#xff0c;很多人都遇到&#xff0c;所以做个图文教程在这里&#xff0c;没出问题的也可以设置一下&#xff0c;目前ipv6也还没普及&#xff…

x-cmd pkg | hurl - HTTP 请求处理工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 Hurl 是 HTTP 请求处理工具&#xff0c;支持使用简单的纯文本格式定义的 HTTP 请求。它的用途非常广泛&#xff0c;既可以用于获取数据&#xff0c;也可以用于测试HTTP会话。 它可以链式处理请求&#xff0c;捕获数值…

ORA-01033: ORACLE initialization or shutdown in progress---惜分飞

客户反馈数据库使用plsql dev登录报ORA-01033: ORACLE initialization or shutdown in progress的错误 出现该错误一般是由于数据库没有正常open成功,查看oracle 告警日志发现 Mon Jan 22 16:55:50 2024 Database mounted in Exclusive Mode Lost write protection disabled …

Unity SRP 管线【第五讲:URP烘培光照】

本节&#xff0c;我们将跟随数据流向讲解UEP管线中的烘培光照。 文章目录 一、URP烘培光照1. 搭建场景2. 烘培光照参数设置MixedLight光照设置&#xff1a;直观感受 Lightmapping Settings参数设置&#xff1a; 3. 我们如何记录次表面光源颜色首先我们提取出相关URP代码&#…

企业数字档案馆的构成要素

企业数字档案馆的构成要素包括以下几个方面&#xff1a; 1. 系统平台&#xff1a;企业数字档案馆需要有一个稳定的系统平台&#xff0c;用于存储、管理和检索档案信息。这个平台可以是基于云计算、数据库或其他技术的&#xff0c;能够支持大容量的数据存储和快速的检索功能。 2…