算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。
一、数据结构和算法绪论——说说数据结构
程序设计 = 数据结构 + 算法
再简单来说,数据结构就是关系,也就是数据元素相互之间存在的一种或多种特定关系的集合。
数据结构的分类:传统上,我们把数据结构分为逻辑结构和物理结构。
其中的逻辑结构是指数据对象中数据元素之间的相互关系,也是我们最需要关注和讨论的问题。而物理结构是指数据的逻辑结构在计算机中的存储形式,我们不用去关心。
逻辑结构的分类:总共有四大逻辑结构。
集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他任何关系。
线性结构:线性结构中的数据元素之间是一对一的关系。
树形结构:数据元素之间存在一种一对多的层次关系。
图形结构:数据元素是多对多的关系。
说完逻辑结构,再来说说物理结构。物理结构研究的是如何把数据元素存储到计算机的存储器中。
数据元素的两种存储结构形式:顺序存储、链式存储。
其中的顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
而链式存储结构呢:他适用于那些时常要变化的结构,顺序结构在这种情况下是力不从心的,只能让链式结构来露面了,相比顺序结构灵活的多。
那很显然了,链式结构中的数据元素存储关系并不能反映其逻辑关系,因此就需要用一个指针存放数据元素的地址,这样子通过地址就可以找到相关联数据元素的位置啦。
二、浅谈算法
什么是算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
晕菜了吧?哈哈,更直白的讲,算法就是你泡妞的技巧和方式。
算法的五个特征:输入、输出、有穷性、确定性和可行性。
算法设计的要求:正确、可读、健壮、时间效率高(速度快)、存储量低。
正确性的四个层次:
算法程序没有语法错误。
算法程序对于合法输入能产生满足要求的输出。
算法程序对于非法输入能产生满足规格的说明。
算法程序对于故意刁难的测试输入都有满足要求的输出结果。
健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常、崩溃或莫名其妙的结果。
三、算法效率的度量方法
经过总结,一个高级语言编写的程序在计算机上的运行时间取决于下列因素:
算法的策略、方案
编译器编译产生的代码质量(软件)
问题的输入规模(输入量的多少)
机器执行指令的速度(硬件)
抛开软硬件因素,那么算法效率就取决于算法所采用的策略方案以及问题的规模。
经过总结,在判断算法效率时,主要关注主项(最高阶项)的阶数。
四、时间复杂度
时间复杂度:语句的总执行次数T(这里的执行次数反映在计算机里就是时间了)与问题规模n的关系。最优算法当然就是时间增长最慢的那个。
五、时间复杂度分析、空间复杂度
常数阶O(1) < 对数阶O(logn) < 线性阶O(n) < nlogn阶O(nlogn) < 平方阶O(n^2) < 立方阶O(n^3) < 指数阶O(2^n) < 阶乘阶O(n!)
空间复杂度:所占空间字节数关于问题规模的函数。