算法
一、算法的定义及其特性
算法是解决问题的步骤,有穷的规则的有序集合;
程序=算法+数据结构
2. 特点
3. 算法和数据结构的关系
算法的设计:依据数据元素之间的逻辑结构,1对1,1对2,1对多
算法的实现:依赖于数据元素的存储结构(顺序存储、链式存储,散列存储)
4. 评价算法的好处
5. 算法的时间复杂度
定义:算法的时间复杂度定义为算法中可执行语句的频度之和,记为T(n)
是先去求每句话的执行的频度;
求频度中最大项,根据算法中语句执行的最大次数(频度)来估算一个算法执行时间的数
量级。
时间复杂度的估算是保留最高次项,并且去掉最高此项的系数
6. 查找
6.1 查找概念
7. 查找的分类
7.1 顺序查找
7.2 折半查找
7.3 分块查找
对无序的元素,数据唯一不重复;
构建一个索引表:
·K max代表的快内的最大值
·起始序号:
依据索引表,实现分块查找。块内无序,块之间有序;
7.4 哈希查找
目的:让查找的算法时间复杂度变成常数级
构建一个哈希映射关系:
数据元素中的某一个数据项,作为主key.构建key值和地址之间的映射关系;
依据key值,直接找到记录的过程;
7.5 哈希映射质数取余
哈希算法:给予主key和地址之间构建的函数映射关系:最为简单的有
质数取余方法:选一个不大于表长度的质数。例如表长15,质数取13;
key%13===(0,12),求得的整数值,是表的下标;也就是表的地址;
因为质数取余,会存在地址冲突的问题。
线性探查法,解决冲突;(key+di)%13;
7.6 链地址方法 解决冲突问题—哈希表
发生冲突时候,将各条记录的链在一起;如图所示的例子,无聚集现象;冲突的数据元素
被链表链接在一起;
申请一块连续的单元,存放链表结点的首地址,冲突的结点以链表形式存储;
所有地址冲突的元素可以通过链表的首节点逐一访问;