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

第一章数据结构

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、简单易懂的递归算法应用实例。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux忘记密码

1.服务器启动界面出现3秒倒计时内&#xff0c;按一下“e”键 2.向右移动光标到ro\这个位置后边&#xff0c;插入&#xff1a;rw init/sysroot/bin/sh_ 切记sh_的下划线后边不要有空格&#xff0c;不然会报错 3.修改完成直接按CtrlX启动系统 4.输入 chroot /sysroot切换进去 5.…

Xftp连接不上Linux虚拟机的原因解决方法

前言&#xff1a; 在当今数字化时代&#xff0c;远程连接到Linux虚拟机是许多开发者和系统管理员日常工作的一部分。然而&#xff0c;有时候&#xff0c;面对Xftp连接不上Linux虚拟机的问题&#xff0c;我们可能感到困惑和无措。这个看似小问题可能导致工作中断&#xff0c;因…

【wu-framework-parent 1.2.2-JDK17-SNAPSHOT 新版本中的 ACW】

版本: 1.2.2-JDK17-SNAPSHOT 项目地址&#xff1a;https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-smart-intergration/wu-smart-acw 演示地址&#xff1a;http://124.222.48.62:30193/wu-smart-acw-ui/#/login admin/admin docker启动 docker …

移动CRM系统是什么?能帮企业做哪些事情?

移动CRM&#xff0c;即移动客户关系管理&#xff0c;是一种利用移动设备进行客户关系管理的工具。随着移动技术的飞速发展&#xff0c;移动CRM在商业领域得到了广泛应用。本文将对移动CRM的概念、功能和作用、价格等方面进行详细介绍。 1.移动crm的概念 移动CRM是基于客户关系…

Facebook的可访问性使命:构建无障碍社交空间

在当今数字时代&#xff0c;社交媒体不仅是人们交流、分享和连接的平台&#xff0c;更是构建开放、包容社交环境的关键。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;积极推动着可访问性使命&#xff0c;致力于构建一个无障碍的社交空间&#xff0c;使每个…

2 - 部署Redis集群架构

部署Redis集群架构 部署Redis集群部署管理主机第一步 准备ruby脚本的运行环境第二步 创建脚本第三步 查看脚本帮助信息 配置6台Redis服务器第一步 修改配置文件启用集群功能第二步 重启redis服务第三步 查看Redis-server进程状态&#xff08;看到服务使用2个端口号为成功&#…

Intel Atom + Artix-7 100T FPGA,CompactRIO单板控制器

模拟和数字I/O&#xff0c;RMC&#xff0c;DisplayPort&#xff0c;1.33 GHz双核CPU&#xff0c;1 GB DRAM&#xff0c;4 GB存储容量&#xff0c;Artix-7 100T FPGA&#xff0c;CompactRIO单板控制器 CompactRIO控制器是搭载了实时处理器和用户可编程FPGA的嵌入式控制器。其产…

OSPF协议LSDB同步过程和邻居状态机

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​ https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle O…

C#winform上位机开发学习笔记7-串口助手的波特率参数设置功能添加

1.功能描述 上位机与下位机进行通讯时需要用到波特率设置功能&#xff0c;以及尝试与下位机实体进行通讯。 2.代码部分 步骤1&#xff1a;串口开启按钮事件中添加代码 serialPort1.BaudRate Convert.ToInt32(comboBox14.Text, 10);//将十进制的文本转换为32位整型赋值给串…

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…

《WebKit 技术内幕》学习之九(4): JavaScript引擎

4 实践——高效的JavaScript代码 4.1 编程方式 关于如何使用JavaScript语言来编写高效的代码&#xff0c;有很多铺天盖地的经验分享&#xff0c;以及很多特别好的建议&#xff0c;读者可以搜索相关的词条&#xff0c;就能获得一些你可能需要的结果。同时&#xff0c;本节希望…

10.1 MyBatis基础(❤❤❤❤)

10. MyBatis入门 1. 框架的作用1. MyBatis简介2. 使用细则3. 1. 框架的作用 1. MyBatis简介 2. 使用细则 3.

【小白学机器学习3】关于最简单的线性回归,和用最小二次法评估线性回归效果, 最速下降法求函数的最小值

目录 1 什么是回归分析 1.1 什么是线性回归 1.2非线性回归 2 数据和判断方法 2.1 原始数据 2.2 判断方法&#xff1a;最小二乘法 3 关于线性回归的实测 3.1 用直线模拟 3.2 怎么判断哪个线性模拟拟合更好呢&#xff1f; 3.2.1 判断标准 3.2.2 最小二乘法 3.2.3 高维…

【JavaWeb】web乱码总结

文章目录 web乱码问题一、 HTML乱码二、 Tomcat控制台乱码三、 IDEA sout 乱码四、 请求乱码4.1 GET请求乱码1. 分析&#xff1a;2. 演示&#xff1a;3. 解决&#xff1a; 4.2 POST请求乱码1. 分析&#xff1a;2. 演示&#xff1a;3. 解决&#xff1a; 五、 响应乱码1.分析&…

云风网(www.niech.cn)个人网站搭建(二)服务器域名配置

这里直接采用宝塔服务器运维管理面板来进行配置&#xff0c;简单无脑 宝塔 Linux面板8.0.5安装脚本 //Centos安装脚本 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec //Ubuntu/Deepi…

docker运行redis,jdk,nginx

Redis 1.查询redis [rootlocalhost ~]# docker search redis NAME DESCRIPTION STARS OFFICIAL redis Redis is an open source key-value store that… 12620 …

k8s---包管理器helm

内容预知 目录 内容预知 helm相关知识 Helm的简介与了解 helm的三个重要概念 helm的安装和使用 将软件包拖入master01上 使用 helm 安装 Chart 对chart的基本使用 查看chart信息 安装chart 对chart的基本管理 helm自定义模板 在镜像仓库中拉取chart&#xff0c;查…

矿泉水硝酸盐超标污染的解决办法

硝酸盐污染对饮用水资源的威胁日益严重&#xff0c;对公共健康和环境造成潜在风险。本文从硝酸盐污染的成因、健康影响、现行去除技术以及综合管理策略等方面进行全面分析&#xff0c;旨在为饮用水安全领域的研究和实践提供参考。 一、硝酸盐污染的成因与影响 成因&#xff1…

深度学习(4)--Keras安装

目录 Keras安装: 1.1.安装CUDA/cuDDN工具包 1.1.1.安装前准备 1.1.2.安装CUDA 1.1.3.安装cuDDN 1.2.安装Anaconda 1.3.安装tensorflow框架 1.3.1.使用cmd安装 1.3.2.使用Anaconda Prompt安装 1.4.安装Keras框架 1.5.打开jupyter notebook&#xff0c;执行import调用 Keras…

Mysql运维篇(二) 主从复制

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人,如有侵权请留言,我及时删除。 一、主从复制的原理 主库会生成一个I/O操作线程进去写的的操作,而从库则生成两个线程,其一是I/O读取线程,其二是一个SQL线程。 1、主库将数据的操作记录到一个二进…