0
点赞
收藏
分享

微信扫一扫

程序语言的奥妙 算法解读 日本人编著。

MaxWen 2022-05-03 阅读 47

程序语言的奥妙 算法解读 日本人编著。

单项链表的一个元素由数据和指向下一个结点的指针构成;单项链表中要指出开头元素的头结点的指针

双向链表:从双向开始都可以遍历所有数据。

三要素:数据,指向前面一个结点的指针,指向后面一个结点的指针。

在查找第N个元素这种情况,数组比链表更高效。数组就是array[N]就可以,链表必须从第一个元素查找,一个个都翻看一遍才能找到想要的元素。

查找第N个元素时候,数组可以利用下标直接查到,但在链表中需要从第一个元素顺序遍历查找,花费太多时间。

数据,插入,删除操作,利用链表的指针效率很高,数组需要把插入位置后面的所有元素都向后移动。

唤醒缓冲区是数组的头尾相连的数据结构,尾元素的下一个元素即为头元素

二叉树:一个树结点和两个子结点组成的结构

单链表使用一个指向后继结点的指针,二叉树使用两个指向后记指针。

根节点位于顶端,没有爸爸,

叶结点位于底部,没有儿子

从根节点到叶节点的层数叫做深度

033

堆:父节点的值小于等于子节点值的二叉树叫做堆。

堆的根一般是最大值或者最小值。适合求极值

把堆改造成数组,从上到下,从左到右;

034:哈希表:数组和链表组合的一种数据结构

被称为跟数组并且元素数为N的数组。

跟数组的元素作为链表的头指针。

哈希函数:返回把输入数与哈希表元素数作商求余的值。

哈希值:

哈希函数用来计算哈希值,哈希值是数组里面的一个元素号码从0到N。

要点:将输入值通过哈希函数计算得到的值作为跟数组中的元素编号,进而找到对应的元素。

035

图是结点和边表示数据的连接关系的数据结构

图表现两个以上项目的连接。项目是结点,线是边。图连接被河流分开的城镇,河流是边,城镇是结点。

有向图,无向图。

例如单向行驶的桥。给图的边赋予权重叫做带权图,过桥收费,通行费可以做为边的权重。

图论:研究边的集合和点的集合构成的图的性质的学问。

第四章:基本的算法

036

循环求1~N的和

037使用数组保存数列的值

038

用变量求数组元素值的和。

039

用计数器求数组的有效元素数

040 根据数组的各元素和以及元素个数求数组的平均值。

041

求数组元素的最大值要使用保存最大值的变量。

数组元素大于MAX时候,MAX值就等于数组元素的值。

042使用变量保存最小值,求数组最小值。

043 使用其他数组存放数组元素的顺序。

044

以秒为单位的时间的大小

把时分秒转换为秒为单位,然后比较两个时间的大小

045

求时间差时候,先把时分秒转化为秒,做差,然后把结果转化为时分秒就行

046

利用临时变量交换两个变量的值

047

用欧几里得相除法求2个数的最大公约数

最大公约数:几个数的约数中最大值

欧几里得定理:整数X》Y,X除以Y的余数为R,X和Y的最大公约数与Y和R的最大公约数相等。X和0的最大公约数是0

X= Y

Y = R

X/Y =R

循环执行就行。

第五章

排序和搜索

048 排序是指按照一定规则对元素对象进行排列摆放

049

多种排序算法

桶排序,基数排序,简单选择法,简单交换法,简单插入法,希尔排序,归并排序,快速排序,堆排序,

050

把数据放在其他数组(桶)来进行排序

比如一组数最大值是100,总共有60个数据,准备101个桶,数字100放在a[100]里,数字78放在a[78]里,然后按照a[0]到a【101】的顺序输出数组。那就是从小到大排列一组数。

很简单的方法啦

也就是把数字放入对应号码的桶中

051.

基数排序

:从数值的低位开始依次重复桶排序。

052

选择最小值与排好序的末位简单交换的简单选择法。

从数据中找出最小值,放在最左边,然后从剩余数据找出最小值,放在有规律数据的右边,重复就导致有规律数据是从小到大。

要点:从未排序部分找到最小值移动到已经排序部分的末尾(右侧)

053

冒泡排序:相邻数据交换

一轮下来会从未排序的序列中提出最大值放到已经排序最右侧。一直重复就一次次提出最大值。结果就是从小到大排列

054

简单插入法:

在已经排序数据的正确位置插入数据

类似打麻将时候把新摸的牌插入本来已经从小到大的牌里,

055

希尔排序:把数据按照一定间隔分组进行排序

12个数据分两半分别排序,然后在分成的一半里再分两半排序,一直细分,细分同时把数据两侧元素比较大小,排序。

056

归并:把多个排序结果的数列合在一起的“合并”

要点:按照升序排好序的3个数列中,最小值存在于各个数列的首个元素中,一旦这个元素被选中是最小元素,后面的元素跟进,一次成为最小元素和其他两组最小元素进行比较。

057

利用归并算法进行排序的归并排序。

归并排序有二分和排序两个步骤。

058

快速排序

通过与基准数据比较大小把数列进行二分

把被分为两份的数据再次进行这种方法,直到最后一个数

优点,速度非常快,适合大量数据的情况

059

堆排序:利用堆的构造进行排序

堆的特性:根结点要么最大,要么最小,父节点要么全部都比子结点大或者小。

060

搜索:从多个数据中找出目标数据

包含:

线性查找:从头开始找,

二分查找:适合已经排序好的数据,

字符串查找:查找字符串中的字符样本,

通过KMP的字符串查找:从不一致字符位置和局部字符串的构成开始提高字符串查找效率,

通过BM的字符串查找:从局部字符串的末尾到开头进行字符比较

061

线性查找:从首位元素开始逐个进行比较处理

062

二分查找:能够从排好序的数列中快速找出数据

063

字符串查找:

在给定字符串中查找指定字符串位置的

064

通过KMP的字符串查找:从不一致字符位置和局部字符串的构成开始提高字符串查找效率

065

通过BM的字符串查找:从局部字符串的末尾到开头进行字符比较

066

牛顿法:活用微分来求高次方程式解

要点:通过导函数和X,Y的变化量表示切线的斜率来求解高次方程的算法。

067

联合方程组的求解方法是高斯消元法。

高斯消元法:是通过前进消去和后退代入两步来求解联合方程组的解,

068

梯形法:

根据梯形面积的计算求定积分值

069

基于图的迪杰斯特拉法:求最短时间,最短距离之类的最优路径。

用图来表示起始点,终点以及途中经过的节点和把他们连接在一起的路径,通过迪杰斯特拉算法求出最优路径。

070

埃拉托瑟尼筛法:判断自然数是否是素数

从自然数中删除不是素数的数,余下的就是素数了

071

利用递归调用求n的阶乘

递归调用是调用自己。求f(x)!=f(x-1) ! *n

类似蛇吞下自己的尾巴,函数调用自身函数

第七章

算法的复杂度

072

算法复杂度有时间和空间复杂度。

时间复杂度是运行花费的时间。

空间复杂度是指利用的空间资源的大小,包括,常亮空间,变量空间,数组空间,栈。

时间复杂度通过操作次数测量,空间复杂度通过使用内存大小测量

073

时间复杂度通过运算,条件比较,时代处理等操作次数来测量。

074

算法的复杂度是通过处理对象的数据量N为基准的O记法来表示的

举报

相关推荐

0 条评论