当前位置:首页 » 操作系统 » 计算机经典算法

计算机经典算法

发布时间: 2024-09-15 20:44:32

‘壹’ 计算机考研:数据结构常用算法解析(1)

数据结构是计算机考研408计算机学科专业基础综合的重要组成部分,考生需要认真复习,尤其是对于数据结构中一些常用的算法问题,考生一定要弄懂弄会,理解的去掌握。猎考考研就带大家一一梳理这些知识点。
第一章
◆ 数据:指能够被计算机识别、存储和加工处理的信息载体。
◆ 数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。数据元素有时可以由若干数据项组成。
◆ 数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。
在高级语言程序中又分为:非结构的原子类型和结构类型
◆抽象数据类型(ADT):是指一个数学模型以及定义在该模型上的一组操作。
一个抽象的数据类型的软件模块通常包含定义和表示和实现
用三元组(D,S,P):数据对象、数据关系、基本操作
◆ 数据结构:指的是数据之间的相互关系,即数据的组织形式。一般包括三个方面的内容:
数据的逻辑结构、存储结构和数据的运算。
◆ 逻辑结构:指各数据元素之间的逻辑关系。
◆ 存储结构:就是数据的逻辑结构用计算机语言的实现。
◆ 线性结构:数据逻辑结构中的一类,它的特征是若结构为非空集,则该结构有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。线性表就是一个典型的线性结构。
◆ 非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接前趋和直接后继。
常用的存储表示方法有四种:
◆ 顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的
逻辑关系由存储单元的邻接关系来体现。由此得到的存储表示称为顺序存储结构。
◆ 链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是
由附加的指针字段表示的。由此得到的存储表示称为链式存储结构。
◆ 索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。

◆ 散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
渐近时间复杂度的表示法T(n)=O(f(n)),这里的"O"是数学符号,它的严格定义是"若T(n)和f(n)是定义在正整数集合上的两个函数,则T(n)=O(f(n))表示存在正的常数C和n0 ,使得当n≥n0时都满足0≤T(n)≤C·f(n)。"用容易理解的话说就是这两个函数当整型自变量n趋向于无穷大时,两者的比值是一个不等于0的常数。这么一来,就好计算了吧。
求某一算法的时间复杂度是关于N的统计,下面的例子很有反面意义
x=91; y=100;
while(y>0)
if(x>100)
{x=x-10;y--;}
else x++;
◆ T(n)=O(1)
◇ 这个程序看起来有点吓人,总共循环运行了1000次,但是我们看到n没有? 没。
◇ 这段程序的运行是和n无关的,就算它再循环一万年,我们也不管他,只是一个常数阶的函数。

考研有疑问、不知道如何总结考研考点内容、不清楚考研报名当地政策,点击底部咨询官网,免费领取复习资料:https://www.87dh.com/xl/

‘贰’ 编程:算法的定义是常用算法有

算法(Algorithm)是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中,算法要用计算机算法语言描述,算法代表用计算机解一类问题的精确、有效的方法。算法+数据结构=程序,求解一个给定的可计算或可解的问题,不同的人可以编写出不同的程序,来解决同一个问题,这里存在两个问题:一是与计算方法密切相关的算法问题;二是程序设计的技术问题。算法和程序之间存在密切的关系。
算法是一组有穷的规则,它们规定了解决某一特定类型问题的一系列运算,是对解题方案的准确与完整的描述。制定一个算法,一般要经过设计、确认、分析、编码、测试、调试、计时等阶段。
对算法的学习包括五个方面的内容:① 设计算法。算法设计工作是不可能完全自动化的,应学习了解已经被实践证明是有用的一些基本的算法设计方法,这些基本的设计方法不仅适用于计算机科学,而且适用于电气工程、运筹学等领域;② 表示算法。描述算法的方法有多种形式,例如自然语言和算法语言,各自有适用的环境和特点;③确认算法。算法确认的目的是使人们确信这一算法能够正确无误地工作,即该算法具有可计算性。正确的算法用计算机算法语言描述,构成计算机程序,计算机程序在计算机上运行,得到算法运算的结果;④ 分析算法。算法分析是对一个算法需要多少计算时间和存储空间作定量的分析。分析算法可以预测这一算法适合在什么样的环境中有效地运行,对解决同一问题的不同算法的有效性作出比较;⑤ 验证算法。用计算机语言描述的算法是否可计算、有效合理,须对程序进行测试,测试程序的工作由调试和作时空分布图组成。

常见的算法有排序,树,图等相关算法

‘叁’ 计算机考研:数据结构常用算法解析(8)

第九章 查找
查找分成静态查找和动态查找,静态查找只是找,返回查找位置。而动态查找则不同,若查找成功,返回位置,若查找不成功,则要返回新记录的插入位置。也就是说,静态查找不改变查找表,而动态查找则会有插入操作,会改变查找表的。
不同的查找所采用的存储结构也不同,静态查找采用顺序表,而动态查找由于经常变动,所以用二叉排序树,二叉平衡树、B-和B+。
静态查找有,顺序查找,折半查找,分块查找(索引顺序查找)
顺序查找(Sequential Search)是最简单的一种查找方法。
算法思路
设给定值为k,在表(R1 R2……Rn)中,从Rn即最后一个元素开始,查找key=k的记录。若存在一个记录Ri(l≤i≤n)的key为k,则查找成功,返回记录序号i;否则,查找失败,返回0。
算法描述
int sqsearch(sqlist r,keytype k) //对表r顺序查找的算法//
{ int i;
r.data[0].key=k; //k存入监视哨//
i=r.len; //取表长//
while(r.data[i].key!=k)
i--; //顺序查找//
return(i);
}
算法用了一点技巧:先将k存入监视哨,若对某个i(≠0)有r.data[i].key=k,则查找成功,返回i;若i从n递减到1都无记录的key为k,i再减1为0时,必有r.data[0].key=k,说明查找失败,返回i=0。
平均查找成功长度ASL= ,而查找失败时,查找次数等于n+l。
折半查找算法及分析
当记录的key按关系≤或≥有序时,不管是递增的还是递减的,只要有序且采用顺序存储。
算法描述
int Binsearch(sqlist r,keytype k) //对有序表r折半查找的算法//
{ int low,high,mid;
low=1;high=r.len; //上下界初值//
while(low<=high) //表空间存在时//
{ mid=(low+high)/2; //求当前mid//
if (k==r.data[mid].key)
return(mid); //查找成功,返回mid//
if (k
high=mid-1; //调整上界,向左部查找//
else
low=mid+1; //调整下界,向右部查找//
}
return(0); //low>high,查找失败//
}
判定树:用来描述二分查找过程的二叉树。n个结点的判定树的深度和n个结点的完全二叉树深度相同= 。但判断树不一定是完全二叉树,但他的叶子结点所在层次之差不超过1。所以,折半查找在查找成功时和给定值进行比较的关键字个数至多为
ASL=
分块查找算法及分析
分块查找(Blocking Search),又称索引顺序查找(Indexed Sequential Search),是顺序查找方法的一种改进,目的也是为了提高查找效率。
1.分块
设记录表长为n,将表的n个记录分成b= 个块,每块s个记录(最后一块记录数可以少于s个),即:
且表分块有序,即第i(1≤i≤b-1)块所有记录的key小于第i+1块中记录的key,但块内记录可以无序。
2.建立索引
每块对应一索引项:
KeymaxLink
其中Keymax为该块内记录的最大key;link为该块第一记录的序号(或指针)。
3.算法思路 分块索引查找分两步进行:
(1)由索引表确定待查找记录所在的块;(可以折半查找也可顺序因为索引表有序)
(2)在块内顺序查找。(只能用顺序查找,块内是无序的)

考研有疑问、不知道如何总结考研考点内容、不清楚考研报名当地政策,点击底部咨询官网,免费领取复习资料:https://www.87dh.com/xl/

‘肆’ 计算机进制的算法,求过程

以前学过的都快忘记了,我刚去网上看了一下
十进制26.75转化为二进制:
先整数跟小数分开:26.75=26+0.75
用整数部分去除以2:26/2=13----余0,
13/2=6-----余1,
6/2=3------余0,
3/2=1------余1,
即11010
然后用小数部分去乘以2:
0.75*2=1.5
取整是1
0.5*2=1
取整是1
即0.11
最后合起来11010.11(B)
十六进制F6.B8H转化为8进制:应该可以直接转化,我还不知道,你先可以把16进制转化为2进制,然后把2进制转化为8进制
还是跟上面一样,先把整数跟小数分开
整数部分F6转化为二进制:F6=1111
0110
二进制整数部分转化为8进制:011
110
110
=366
小数部分B8转化为二进制:B8=1011
1000
二进制小数部分转化为8进制:010
111
000=270
即转化为366.270(Q)
二进制
八进制
000
0
001
1
010
2
011
3
100
4
101
5
110
6
111
7
二进制
十六进制
1111
=
8
+
4
+
2
+
1
=
15
F
1110
=
8
+
4
+
2
+
0
=
14
E
1101
=
8
+
4
+
0
+
1
=
13
D
1100
=
8
+
4
+
0
+
0
=
12
C
1011
=
8
+
0
+
2+
1
=
11
B
1010
=
8
+
0
+
2
+
0
=
10
A
1001
=
8
+
0
+
0
+
1
=
9
9
...........................
0001
=
0
+
0
+
0
+
1
=
1
1
0000
=
0
+
0
+
0
+
0
=
0
0

热点内容
android常用的工具类 发布:2024-11-24 21:42:25 浏览:48
用户管理源码 发布:2024-11-24 21:29:36 浏览:677
监控怎么配置路由器 发布:2024-11-24 21:29:27 浏览:455
小型编译器的实现 发布:2024-11-24 21:27:48 浏览:999
安卓手机为什么下巴不掉 发布:2024-11-24 21:26:37 浏览:214
怎么编程枪战 发布:2024-11-24 21:25:52 浏览:855
安卓公测版哪个好 发布:2024-11-24 21:15:58 浏览:873
androidforvs2010 发布:2024-11-24 21:06:05 浏览:286
安装MySqllinux 发布:2024-11-24 21:05:51 浏览:326
联通网洛盒的密码在哪里 发布:2024-11-24 21:05:12 浏览:181