我的算法笔记---上

数据结构和算法读书笔记



1.疑惑:数据结构和算法是什么啊?有毛用啊?


数据结构:数组、链表、栈、二叉树、哈希表

算法:对结构中数据的处理

算法和数据结构的作用: 现实世界数据存储(家庭地址的存储)  现实世界建模(图)   程序员工具


算法概述:增删查 遍历 排序 递归


专业术语:数据库  记录   字段   关键字(限定词带出记录,记录中包含所有字段,全部记录构成数据库)



过程性语言的问题:

    程序与现实世界缺乏对应关系   

    程序内部结构出现问题,   

    重视方法,不重视数据,粗糙的数据组织结构,

对象的特征:

    对象同时包括方法和字段

    类是对象的说明

    创建对象,new和类的名称连用

    .调用对象的方法

Java数据结构的类库:java.util.*


2.数组

数组又啥好学的呢?

特点:数据项已知   数组的长度固定   非空数据项连续存储、不能有空

插入快(数据项)  

查找慢(n/2)  

删除慢(n/2查找 n/2移动)


允许重复值条件下的算法、不允许从复制条件下的算法之间的比较

不要太匆忙:算法的缓慢但有条不紊的本质


Java中数组的基础知识:略   数组的索引该由谁负责,调用者又在关注什么?

数据结构的隐藏  各司其职  arr.setEle(k,arr.getEle(ke+1)) 进化到 arr.set(value)


有序数组:

线性查找:找到比自己大的就退出查询

二分查找:二分法查找显著提升速度   log2n对数

查询快、插入慢


算法的比较,大O表示法:O(1) O(logN)  O(N)  O(N平方)

无序数组插入:常数

线性查询:与N成正比

二分查找:与logN成正比


为什么不使用数组表示一切?数组缺点导致的,慢、固定长度




3.简单排序

计算机不如人类的地方啊?不够智能啊


冒泡排序:冒泡,冒泡,顾名思义啊,怎么一个冒泡法:把最比较出来,放在最边上

算法效率:(n-1)+(n-2)+(n-3)...+1=n*(n-1)/2  O(n2)级别

不变性:out右边的数据项总是有序的


插入排序:部分有序   部分无序

比较次数:概率论的角度。最大:n*(n-1)/2   平均:n*(n-1)/2/2 最小:比冒泡排序减少1半的比较量

不变性:比outer变量下标号小的数据项都是局部有序的

排序规则:compareTo()方法


算法性能比较规则:大O表示法

算法稳定性:具有相同关键字的数据项,经过多次排序,他们的顺序保持不变,这样的排序就是稳定的

不变性:=规律性



4.栈和队列、优先队列。 只有先干完一件事才能干另一件事情

用途不同:数组--数据库  栈队列作为程序员的工具

受限访问:数组--任意访问  栈队列特定时刻只能有一个数据项被操作

更加抽象:可以基于其他数据结构


栈:3*(4+5)很吊  只是一个概念、抽象 

精辟:优先级低的项目被压到栈底,等待回来执行

栈的容量:小

栈的实例:reverse、分隔符匹配

效率:O(1)



队列:排队 指针的移动提高效率

循环队列:“缓冲环”   连续序列  折断序列

大量的插入和移除操作的时候,数据项统计影响性能

isFull、isEmpty没有数据项计数字段的队列实现?逻辑啊,大脑啊

效率:O(1)


双端队列:功能繁多=双端队列+栈+队列。

猜你喜欢

转载自blog.51cto.com/13496382/2107607
今日推荐