我的算法笔记---上

数据结构和算法读书笔记

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)

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

原文地址:http://blog.51cto.com/13496382/2107607

时间: 2024-10-19 20:19:19

我的算法笔记---上的相关文章

算法笔记2-优先队列(堆)(上)

一.什么是优先队列? 看一情景:我们去KTV唱歌,点歌的时候,可以发现所点的歌就是一个队列. 这时候,一个MM突然不玩手机了想唱歌,于是她来点歌,并且想尽早轮到她. 于是她可以选择"插歌"这个功能插到前排队列里. 这种具备可以插入优先权元素的队列,就叫优先队列.但是,这个定义不是严谨的. 优先队列的基本模型是这样的-- 具备两个功能: insert插入: deleteMin 删除最小者. 它的工作就是-- 它很有用哦,具体可以用在操作系统,外部排序和贪婪算法中等. 二.怎么实现优先队列

C++ Primer 学习笔记_40_STL实践与分析(14)--概要、先来看看算法【上】

STL实践与分析 --概述.初窥算法[上] 标准库容器定义的操作很少.并没有给容器加入大量的功能函数.而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是"泛型"的.可作用在不同类型的容器和不同类型的元素上! 所谓泛型算法:一是由于它们实现共同的操作,所以称之为"算法";而"泛型"指的是它们可以操作在多种容器类型上--不但可作用于vector或list这些标准库类型,还可用在内置数组类型.甚至其它类型的序列上,仅仅要自己定义的容器类型仅仅要

算法笔记-DTW动态时间规整

算法笔记-DTW动态时间规整 简介 简单的例子 定义 讨论 约束条件 步模式 标准化 点与点的距离函数 具体应用场景 分类 点到点匹配 算法笔记-DTW动态时间规整 动态时间规整/规划(Dynamic Time Warping, DTW)是一个比较老的算法,大概在1970年左右被提出来,最早用于处理语音方面识别分类的问题. 1.简介 简单来说,给定两个离散的序列(实际上不一定要与时间有关),DTW能够衡量这两个序列的相似程度,或者说两个序列的距离.同时DTW能够对两个序列的延展或者压缩能够有一定

算法笔记_023:拓扑排序(Java)

目录 1 问题描述 2 解决方案 2.1 基于减治法实现 2.2 基于深度优先查找实现 1 问题描述 给定一个有向图,求取此图的拓扑排序序列. 那么,何为拓扑排序? 定义:将有向图中的顶点以线性方式进行排序.即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面. 2 解决方案 2.1 基于减治法实现 实现原理:不断地做这样一件事,在余下的有向图中求取一个源(source)(PS:定义入度为0的顶点为有向图的源),它是一个没有输入边的顶点,然后把它和所有从它出发

算法笔记_018:旅行商问题(Java)

目录 1 问题描述 2 解决方案 2.1 蛮力法   1 问题描述 何为旅行商问题?按照非专业的说法,这个问题要求找出一条n个给定的城市间的最短路径,使我们在回到触发的城市之前,对每个城市都只访问一次.这样该问题就可以表述为求一个图的最短哈密顿回路的问题.(哈密顿回路:定义为一个对图的每个顶点都只穿越一次的回路) 很容易看出来,哈密顿回路也可以定义为n+1个相邻顶点v1,v2,v3,...,vn,v1的一个序列.其中,序列的第一个顶点和最后一个顶点是相同的,而其它n-1个顶点都是互不相同的.并且

算法笔记_071:SPFA算法简单介绍(Java)

目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特点是可以求含负权图的单源最短路径,且效率较高.(PS:引用自百度百科:spfa是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛

算法笔记之排序

最近在看<算法笔记>,如果单从算法来说,这本书真正做到了短小精悍,首先以排序入题,那么我们今天也来说说排序. 排序 将一堆杂乱无章的元素按照某种规则有序排列的过程就叫"排序".排序是一种非常基础的算法,有着广泛的理论和实践基础.对一个排序算法来说,一般从如下3个方面衡量算法的优劣: 时间复杂度:主要是分析关键字的比较次数和记录的移动次数. 空间复杂度:分析排序算法中需要多少辅助内存 稳定性:若两个记录A和B的关键字值相等,但排序后A.B的先后次序保持不变,则称这种算法是稳定

算法笔记(二)抽牌法产生随机全排列

上一章的算法笔记,并不算一个算法系列的一个合适的开始.而本章将会介绍一种产生随机全排列的方法,下一章开始,就正式开始我们的排序算法了. 在我们的排序算法演示器中,我们需要一组随机的数据来作为排序的开始,而本章,就会产生这么一组随机数据. (一)实现分析 我们需要一组随机的数据,而且似乎产生的方法不会太难.我们只需要通过rand()函数获得一个随机数,让其对count(排序的规模)取模,结果作为数组的索引,其值是当前已产生的随机数的个数,如果已经存在了,继续查找,直到产生随机数的个数与总数相同.

算法笔记--数位dp

算法笔记 这个博客写的不错:http://blog.csdn.net/wust_zzwh/article/details/52100392 模板: int a[20]; ll dp[20][state];//不同题目状态不同 ll dfs(int pos,/*state变量*/,bool lead/*前导零*/,bool limit/*数位上界变量*/)//不是每个题都要判断前导零 { //递归边界,既然是按位枚举,最低位是0,那么pos==-1说明这个数我枚举完了 if(pos==-1) re