数据结构是描述非数值计算再实体中的数学模型以及在计算机中的表示方法,以及这些模型进行的操作如何在计算机中中进行操作
基本概念:
数据:所有能被输入到计算机中,且能被计算机处理的符号的集合---是计算机操作对象的总称
数据结构的逻辑组织
线性结构:线性表(表、栈、队列、串等)
非线性结构: 树(二叉树,Huffman树,二叉索引树等)
图(有向图,无向图等)
图》树》二叉树》线形图 (》包含)
数据结构的存储结构
逻辑结构到物理内存的映射
四类:顺序(存储单元的顺序地址)
链接(指针的地址指向关系)
索引(对数据建立索引的表,通过这个表可以有效找到数据)
散列(一种特殊的索引,能通过要查的关键码的映射,在整个散列表中快速找到存储的空间,把数据找出来)
抽象数据类型
栈:逻辑结构:线性表
操作特点:限制访问端口---只允许在一端进行插入、删除操作
入栈(push)、出栈(pop)【最重要】、取栈顶(top)、判栈空(isEmpty)
算法特性及简单分类
问题——算法——程序
算法特性:
通用性(反复求解同一类问题)eg:八皇后问题、N后问题解决方案类似
有效性(问题求解是有意义的)
确定性(每一个算法步骤都是明确的)
有穷性(确定时间、确定步骤,不能有死循环)
基本算法分类
穷举法:顺序寻找K值(最开始先穷举)
回溯、搜索:八皇后、图和树遍历 (回溯思想:能进则进,不能进就换,不能换就退)
递归分治:二分求K值、快速排列、归并排序
贪心法:Haffaman编码树、最短Dijkstra算法、最小生成树Prim算法
(有贪心的数据结构、每次贪心找最佳,最终找到的结构也是最佳的)
动态规划:最短路Floyd算法(小规模问题得最优解,更大规模时组合这些最优解,最后对整个大问题得到最优解)
k=input() L=[1,2,3,4,5,6,7,8,9] low=0 high=len(L)-1 mid=(low+high)/2 def erfen(k): global mid,low,high if L[k]>L[mid]: low=mid+1 mid=(low+high)/2 return erfen(k) elif L[k]<L[mid]: high=mid-1 mid=(low+high)/2 return erfen(k) else: print L[k],mid erfen(k)
算法的复杂性分析:
大O表示法的时间运算法则
加法规则:f1(n)+f2(n)=o(max(f1(n),f2(n)))——只关心耗时最长的
顺序结构,if结构,switch结构
乘法规则:f1(n)*f2(n)=O(f1(n)*f2(n))
for,while,do-while结构(嵌套、循环)