数据结构和算法中包含了太多的内容,根据我看到的大概有以下的内容:
简单的说,是“3+2”:3种数据结构:线性结构、树、图;2种算法:查找、排序。其中线性结构又可以分为:顺序表、链表、队列、栈。它们在平时有着更加广泛的应用。而树、图则在解决一些特定的算法时更加管用。
其次,数据结构并不是死的:你可以根据自己的需要定制数据结构的成员。而这些成员又决定了对应于这种结构的算法。因此,数据结构跟算法之间并不是孤立的,而是紧密联系的一体:对于有的算法,比如返回树中一个节点的父节点,如果你在树结构中添加一个parent指针,就很好办,如果没有这个指针,做起来就会很纠结。
1、程序设计=数据结构+算法
我的理解:算法,就是解决一个问题所用到的思路和方法。
对于特定的问题,我们需要使用不同的算法,有时候是一个算法,有时候是几个算法的结合,甚至有时候需要我们根据实际问题设计与之最匹配的算法。
算法一般具有下列5个重要特性:
(1)输入: 一个算法应该有一个或多个输入:
(2)有穷性:一个算法必须在执行有穷步骤之后正常结束,而不能形成无穷循环:
(3)确定性:算法中的每一条指令必须有确切的含义,不能产生多义性:
(4)可行性:算法中的每一条指令必须是切实可执行的,即原则上可以通过已经实现的基本运算执行有限次来实现:
(5)输出:一个算法应有零个或多个输出,这些输出是同输入有某个特定关系的量。
2、什么是数据结构?
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科(带结构的数据元素的集合。)。简单来说,数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合。
程序设计=数据结构+算法
一般的,我们把数据结构分为逻辑结构和物理结构。
逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题。
物理结构:是指数据的逻辑结构在计算机中的存储形式。
四大逻辑结构:
1>线性结构:数据元素之间是一对一的关系;
2>树形结构:数据元素之间存在一种一对多的层次关系;
3>图形结构:数据元素是多对多的关系;
4>集合结构:其中的数据元素除了同属于一个集合外,它们之间没有其他不三不四的关系。
数据的逻辑结构有4种基本类型:集合结构、线性结构、树形结构和图形结构。线性表和树是最常用的两种高效数据结构,许多高效的算法都能用这两种数据结构来设计实现。偶尔也会使用到图形结构,集合结构使用甚少。
根据物理结构的定义,我们实际上研究的的就是如何把数据元素存储到计算机的存储器中。
存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。
3、时间复杂度和空间复杂度
1>用常数1取代运行时间中的所有加法常数;
2>在修改后的运行次数函数中,只保留最高阶项;
3>如果最高阶项存在且不是1,则去除与这个项相乘的常数;
这样,得到的最后结果就是大O阶。
一般情况下,当一个算法包含两个(或多个)独立的过程我们在计算完各自的时间复杂度后,只选择较大的那个。例如:N和NlogN,那么这个算法的时间复杂度就是NlogN。