1.1什么是数据结构
数据:整数,字串,图像等都可以说是数据
数据元素:树的一个节点,每一种数据结构中的圆圈,由数据项组成
举个例子:比如一张地图,吧一个城市作为一个数据元素,那么可以把每个城市的经纬度,人口数作为它的数据项, 多个数据项构成一个数据元素,我们对数据元素进行操作
数据对象:是性质相同的元素的集合,例如整数集合,字符集合等
数据结构:数据元素之间的关系成为结构
有四类基本数据结构:1.集合
2.线性结构
3.树形结构
4.网状或图状结构
数据结构在计算机中的表示(映像)称为物理结构,又称存储结构。
抽象数据类型(ADT):就是将数据结构封装好的类,可以直接使用的那种,比如java的List类
1.2 找最长子串之和的算法
1.暴力搜
2.算法1的优化
算法1的第三个for是多余的,对于相同的i不需要重新加,只需要在原来的基础上加一个元素就可以了
1.3 分治法
分治法:把一个大的问题分成小部分来解决
对于找最大子序列的和,要怎么使用分治呢?
先把整个序列从中间分成两份,然后递归地分治地求解两边的最大值,再找跨越中线的最大值,三个值最大的那一个就是最大的子序列和。具体实施流程可以从上图看出:
首先从-2和-1之间进行分割,分成了左右两边,那么,我们得先找出左边的最大值,可是左边还是有比较多的数字,那么继续分治。
对左边分治在-3和5之间划线,分成左右两部分,左部分是4和-3,有两个数,
对这两个继续分治,那么左边得到最大是4,右边-3为负数,直接返回0,跨越边界和是4-3=1;比较4,1,0得到4和-3这一左部分最大为4,同理,右边部分5和-2可以得到右部分最大的和是5那么还需要一个跨越边界的和,从-3和5之间的那条橙线往左看,-3+4=1,引用左边的结果1,继续往右看,1+5=6,6-2=4;这期间最大的就是6,因此跨越边界之和最大是6,比较4,5,6得到-2和-1这第一条红线的左边部分最大子列和为6,同理可得右边最大子列和为8。那么又还需要一个跨越边界和,从最粗的红线往左看-2+5=3-3+4=4,引用左边最大的结果4,继续往右看,4-1+2=5+6=11-2=8,这期间最大的是11所以取11,比较11,6,8最大的是11,因此最长子列和即为11。