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

news2024/9/22 21:17:51

第一章数据结构

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.coloradmin.cn/o/1404323.html

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

相关文章

NOIP2003提高组T1:神经网络

题目链接 [NOIP2003 提高组] 神经网络 题目背景 人工神经网络&#xff08;Artificial Neural Network&#xff09;是一种新兴的具有自我学习能力的计算系统&#xff0c;在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向&am…

edge网页白屏或一张蓝色背景图解决方案

我们使用edge时有是会遇到网页白屏或一张蓝色背景图。 搜索内容时出现 不用担心&#xff0c;按照以下步骤

Axios取消请求:AbortController

AbortController AbortController() 构造函数创建了一个新的 AbortController 实例。MDN官网给出了一个利用AbortController取消下载视频的例子。 核心逻辑是&#xff1a;利用AbortController接口的只读属性signal标记fetch请求&#xff1b;然后在需要取消请求的时候&#xff0…

力扣1143. 最长公共子序列(动态规划)

Problem: 1143. 最长公共子序列 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 我们先假设已经将两个字符串转换为两个char类型的数组&#xff08;t1,t2&#xff09;便于比较 1.如果t1[i] t2[j],有三种决策&#xff1a;&#xff08;i1&#xff0c;j1&#xff09;&a…

第二篇【传奇开心果短博文系列】Python的OpenCV库技术点案例示例:图像处理

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例短博文系列 博文目录一、项目目标二、第一个示例代码三、第二个示例代码四、第三个示例代码五、第四个示例代码六、第五个示例代码七、知识点归纳总结 系列短博文目录 Python的OpenCV库技术点案例示例短博文…

初识k8s(概述、原理、安装)

文章目录 概述由来主要功能 K8S架构架构图组件说明ClusterMasterNodekubectl 组件处理流程 K8S概念组成PodPod控制器ReplicationController&#xff08;副本控制器&#xff09;ReplicaSet &#xff08;副本集&#xff09;DeploymentStatefulSet &#xff08;有状态副本集&#…

docker配置node项目

首先在项目根目录创建Dockerfile FROM node:18.19RUN mkdir /appCOPY . /appWORKDIR /appRUN npm installEXPOSE 8081CMD ["npm","run","start"]添加.dockerignore文件 /dist /node_moduleslogs *.log npm-debug.log* yarn-debug.log* yarn-er…

Linux中如何根据一个单词快速锁定到日志

Linux中如何根据一个单词快速锁定到日志 记住&#xff0c;人生的价值不在于终点的远近&#xff0c;而在于沿途的风景和历经的风雨。每一步都是成长&#xff0c;每一刻都是奇迹。保持一颗热情奔放的心&#xff0c;勇敢地迎接生活的挑战&#xff0c;你将会发现&#xff0c;每一天…

ppt流程图模板怎么绘制?手把手教你绘制PPT流程图

ppt流程图模板怎么绘制&#xff1f;在工作中&#xff0c;演示文稿中的流程图往往能够清晰地展示项目的流程和逻辑&#xff0c;使观众更好地理解内容。但是&#xff0c;很多人在制作PPT时&#xff0c;可能会对如何绘制流程图感到困惑。今天&#xff0c;就给大家手把手教一下如何…

基于springboot+vue的网上点餐系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 背景和意…

JavaEE 网络原理

JavaEE 网络原理 文章目录 JavaEE 网络原理1. 网络互连1.1 局域网LAN1.2 广域网WAN 2. 网络通信基础2.1 IP地址2.2 端口号 3. 网络协议3.1 概念3.2 五元组3.3 协议分层3.4 TCP/IP 五层模型3.5 封装和分用 1. 网络互连 随着时代的发展&#xff0c;需要多个计算机协同工作来完成…

中仕教育:选调生和考研可以一起准备吗?

研究生入学考试&#xff0c;是本科生们提升学历继续深造的主要途径。而选调生&#xff0c;是指通过考试选拔的优秀应届毕业生&#xff0c;经过锻炼后分配到各级工作。这两者作为大部分人选择的方向&#xff0c;发展前景都是比较好的。 考研和选调生可以一起准备吗? 是可以的…

8. UE5 RPG创建UI(上)

UI是显示角色的一部分属性玩家可以直接查看的界面&#xff0c;通过直观的形式在屏幕上显示角色的各种信息。如何使用一种可扩展&#xff0c;可维护的形式来制作&#xff0c;这不得不说到耳熟能详的MVC架构。 MVC&#xff08;Model-View-Controller&#xff09;是一种常见的软件…

计算机网络-AAA原理概述

对于任何网络&#xff0c;用户管理都是最基本的安全管理要求之一&#xff0c;在华为设备管理中通过AAA框架进行认证、授权、计费实现安全验证。 一、AAA概述 AAA&#xff08;Authentication(认证), Authorization(授权), and Accounting(计费)&#xff09;是一种管理框架&#…

vue3-组件基础

什么是组件 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行处理。在实际应用中&#xff0c;组件常常被组织成层层嵌套的树状结构。 定义一个组件 我们一般会将 Vue 组件定义在一个单独的 .vue 文件中&#xff0c;这被叫做单文件组件 (简称…

Leetcode刷题笔记题解(C++):670. 最大交换

思路&#xff1a; 假设数字 9923676 从右边找最大的数字的下标maxindex&#xff0c;然后向左边寻找小于最大数字的数的下标&#xff0c;直到找到最左边&#xff0c;交换两者得出新的数字&#xff0c;比如从左到右递减的数字如9621则不需要变化&#xff0c;在寻找中记录这种数…

最长子字符串的长度(二) - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 给你一个字符串 s&#xff0c;字符串s首尾相连成一个环形 &#xff0c;请你在环中找出’l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串的长度。 输入描…

【数据结构与算法】排序算法:冒泡排序,冒泡排序优化,选择排序、选择排序优化

目录 一、冒泡排序 1、冒泡排序思想 2、冒泡排序算法的性能分析 代码实现&#xff1a; 二、选择排序 1、选择排序思想 2、选择排序算法的性能分析 代码实现&#xff1a; 一、冒泡排序 1、冒泡排序思想 冒泡排序的基本思想是通过相邻元素之间的比较和交换来逐步将最大…

前端JavaScript篇之实现有序数组原地去重方法有哪些?

目录 实现有序数组原地去重方法有哪些&#xff1f;方法一&#xff1a;使用 Set 数据结构代码实现&#xff1a;思路说明&#xff1a; 方法二&#xff1a;使用双指针遍历代码实现&#xff1a;思路说明&#xff1a; 实现有序数组原地去重方法有哪些&#xff1f; 在 JavaScript 中…

Dockerfile-xxxx

1、Dockerfile-server FROM openjdk:8-jdk-alpine WORKDIR /app COPY . . CMD java -Xms1536M -Xmx1536M -XX:UseG1GC -jar -Dlog4j2.formatMsgNoLookupstrue -Dloader.pathresources,lib -Duser.timezoneGMT-05 /app/server-main-1.0.0.jar 2、Dockerfile-bgd #FROM openjdk…