计算机算法重要知识点(个人笔记)

计算机算法重要知识点(个人笔记)

目录

1.1 什么是算法

算法(algorithm)是一系列解决问题的明确指令,也就是说,对于符合一定规范的输入,能够在有限时间内获得要求的输出。
算法的概念图
观点:可以认为算法是问题的程序化解决方案。

1.2 算法的描述

伪代码(pseudocode) 是自然语言和类编程语言组成的混合结构。伪代码往往比自然语言更精确,而且用伪代码描述的算法往往会更简洁。用箭头代表赋值操作。

1.3 算法的分析

效率有两种

  • 时间效率(time efficiency),指出算法运行有多快。
  • 空间效率(space efficiency),说明算法需要多少额外的存储空间。

1.4重要的问题类型

  • 排序问题(sorting problem):要求我们按照升序重新排列给定列表中的数据项。
  • 查找问题(searching problem):就是在给定的集合(或者是多重集,它允许多个元素具有相同的值)中找一个给定的值[我们称之为查找键(search key)]。
  • 字符串处理,也称字符串匹配问题
  • 图问题
  • 组合问题
  • 几何问题:类似于点、线、多面体这样的几何对象。
  • 数值问题(numerical problem):是另一个广阔的具体应用领域,涉及具有连续性的数学问题:像解方程和方程组,计算定积分以及求函数的值等。
    第2章 算法效率分析基础

不做笔记
第3章 蛮力法

蛮力法(brute force)是一种简单直接地解决问题的方法,常常直接基于问题的描述和所涉及的概念定义。

3.1 选择排序和冒泡排序

3.1.1选择排序

在这里插入图片描述

3.1.2 冒泡排序

在这里插入图片描述

3.2 顺序查找和蛮力字符串匹配

3.2.1 顺序查找

该算法只是简单地将给定列表中的连续元素和给定的查找键进行比较,直到遇到一个匹配的元素(成功查找),或者在遇到匹配元素前就遍历了整个列表(失败查找)。
实现顺序查找时常常会使用这样一个小技巧:如果我们把查找键添加到列表的末尾,那么查找就一定会成功,所以不必在算法的每次循环时都检查是否到达了表的末尾。以下是这个增强版本的伪代码。
在这里插入图片描述

3.2.2蛮力字符串匹配

查找字符串第一个字符的位置
在这里插入图片描述
请注意,在这个例子中,几乎每做一次字符比较就要移动一次模式的位置。然而,最坏的情况比这还要糟得多:在移动模式之前,算法可能会做足m次比较,而n-m+1次尝试的每一次都可能会遇到这种情况。因此,在最坏的情况下,该算法属于O(nm)。

3.3 最近对和凸包问题的蛮力算法

3.3.1 最近问题

最近点对问题要求在一个包含n个点的集合中,找出距离最近的两个点。这种处理平面或者高维空间的邻近点的问题,在各种计算几何问题当中是最简单的。最近点对问题的一个最重要的应用是统计学中的聚类分析
在这里插入图片描述

3.3.2 凸包问题

在平面或者高维空间的一个给定点集合中寻找凸包,被视为计算几何中最重要的问题之一。
定义: 对于平面上的一个点集合(有限的或无限的),如果以集合中任意两,点p和q为
端,点的线段都属于该集合,我们说这个集合是凸的。

在这里插入图片描述
凸包问题省略

3.4 穷举查找

对于组合问题来说,穷举查找(exhaustive search)是一种简单的蛮力方法。它要求生成问题域中的每一个元素,选出其中满足问题约束的元素,然后再找出一个期望元素(例如,使目标函数达到最优的元素)。 注意,虽然穷举查找的思想很简单直接,但在实现时,它常常会要求算法来生成某些组合对象。
常见问题

  1. 旅行商问题
  2. 背包问题
  3. 分配问题

3.5深度优先查找和广度优先查找

3.5.1 深度优先查找

深度优先查找可以从任意顶点开始访问图的顶点,然后把该顶点标记为已访问。在每次迭代的时候,该算法紧接着处理与当前顶点邻接的未访问顶点。(如果有若干个这样的顶点,可以任意选择一个顶点。但在实际应用中,选择哪一个邻接的未访问候选顶点主要是由表示图的数据结构决定的。在我们的例子中,我们总是根据顶点的字母顺序来选择顶点。)这个过程一直持续,直到遇到一个终点一该顶点的所有邻接顶点都已被访问过。在该终点上,该算法沿着来路后退一条边,并试着继续从那里访问未访问的顶点。在后退到起始顶点,并且起始顶点也是一个终点时,该算法最终停了下来。这样,起始顶点所在的连通分量的所有顶点都被访问过了。如果未访问过的顶点仍然存在,该算法必须从其中任一顶点开始,重复上述过程。
用一个栈来跟踪深度优先查找的操作是比较方便的。在第一次访问一个顶点时(也就是说,开始对该顶点的访问时),我们把该顶点入栈:当它成为一个终点时(也就是说,结束对该顶点的访问时),我们把它出栈。
深度优先查找树(depth-first search forest)
在这里插入图片描述

3.5.2 广度优先查找

按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边的所有未访问顶点,以此类推,直到所有与初始顶点同在一个连通分量中的顶点都访问过了为止。如果仍然存在未被访问的顶点,该算法必须从图的其他连通分量中的任意顶点重新开始。
使用队列(注意它和深度优先查找的区别!)来跟踪广度优先查找的操作是比较方便的。该队列先从遍历的初始顶点开始,将该顶点标记为已访问。在每次迭代的时候,该算法找出所有和队头顶点邻接的未访问顶点,把它们标记为已访问,再把它们入队。然后,将队头顶点从队列中移去。
广度优先查找森林(breadth-first search forcest)
在这里插入图片描述
第4章 减治法

4.1 插入排序

我们考虑如何用减一技术对一个数组A[0.-1]排序。遵循该方法的思路,我们假设对较小数组A[0.n-2]排序的问题已经解决了,得到了一个大小为n-1的有序数组:A0]≤…≤[n-2]。我们如何利用这个较小规模的解,并将元素A[n-1]考虑进来,来得到原问题的解呢?显然,我们需要做的就是在这些有序的元素中为A[-1]找到一个合适的位置,然后把它插入到那里。一般来说,我们可以从右到左扫描这个有序的子数组,直到遇到第一个小于等于A[-1]的元素,然后把A[n-1]插在该元素的后面。这种算法被称为直接插入排序(straight insertion sort),或者简称为插入排序(insertion sort)。
在这里插入图片描述

4.2 拓扑排序

4.3生成祝贺对象的算法

4.4 减常因子算法

以上略,有时间再做笔记

4.4.1 折半查找

对于有序数组的查找来说,折半查找是一种性能卓越的算法。它通过 比较查找键K和数组中间元素A[m] 来完成查找工作。如果它们相等,算法结束。否则,如果K<A[m],就对数组的前半部分执行该操作,如果K>A[m],则对数组的后半部分执行该操作。
在这里插入图片描述

4.4.2 假币问题
4.4.3 俄式乘法
4.4.4 约瑟夫斯问题

== 三问题略==

4.5减可变规模算法

4.5.1 插值查找

有时间再做笔记
第五章 分治法

基本思想:
将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解。
精髓:
分——将问题分解为规模更小的子问题。
治——将这些规模更小的子问题逐个击破。
合——将已解决的子问题合并,最终得到原问题的解。

5.1 合并排序

在这里插入图片描述
在这里插入图片描述
图5.2演示的是用合并排序算法对数列8,3,2,9,7,1,5,4进行排序的操作过程。
在这里插入图片描述

5.2 快速排序

在这里插入图片描述

学习资源

如果你是也准备转行学习网络安全(黑客)或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你

**读者福利 |** CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 **(安全链接,放心点击)**![](https://i-blog.csdnimg.cn/img_convert/a6502ab41b1a86132b9ebb5aab9a2cdc.jpeg)

知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。

1、知识库价值

深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。

广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。

实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。

2、 部分核心内容展示

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

在这里插入图片描述

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。

1、网络安全意识

img

2、Linux操作系统

img

3、WEB架构基础与HTTP协议

img

4、Web渗透测试

img

5、渗透测试案例分享

img

6、渗透测试实战技巧

图片

7、攻防对战实战

图片

8、CTF之MISC实战讲解

图片

3、适合学习的人群

一、基础适配人群

  1. 零基础转型者‌:适合计算机零基础但愿意系统学习的人群,资料覆盖从网络协议、操作系统到渗透测试的完整知识链‌;
  2. 开发/运维人员‌:具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展‌或者转行就业;
  3. 应届毕业生‌:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期‌;

二、能力提升适配

1、‌技术爱好者‌:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌;

2、安全从业者‌:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌;

3、‌合规需求者‌:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员‌;

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】

*技术爱好者**‌:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌;

2、安全从业者‌:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌;

3、‌合规需求者‌:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员‌;

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值