算法与数据结构
计算机软件的最终成果都是以程序的形式体现的,一个程序应当包含以下两方面的内容:
(1)对数据的描述:在程序中指定用到哪些数据以及这些数据的类型和数据的组织形式,也就是数据结构。
(2)对数据操作的描述:即操作步骤,也就是算法。
数据结构是算法的基础,算法是数据结构的灵魂。数据结构设计和算法分析的目的是设计更好的程序,程序的本质是为要处理的问题选择好的数据结构,同时在此结构上施加一种好的算法。
对于一个程序来说,数据是原料。一个程序所要进行的计算或处理总是以某些数据为对象,将这些松散无组织的数据组织成一个数据结构,算法操作的就是这些数据结构。算法的设计和选择要结合数据结构,简单地说数据结构的设计就是选择存储方式,如确定问题中的信息是用数据存储还是普通的变量存储或其他更加复杂的数据结构存储。算法设计的实质是为实际问题要处理的数据选择一种恰当的存储结构,并在选定的存储结构上设计一个好的算法,因为一个数据结构会对应多种不同的算法,此时就要利用时间复杂度与空间复杂度来选择一个最优算法。不同的数据结构设计将对应差异很大的算法。
数据存储结构会影响算法的好坏,因此在选择存储结构时,也要考虑其对算法的影响。例如,存储结构的存储能力,如果存储结构存储能力较强,则可以存储较多的信息,算法将会好设计一些。反之,对于过于简单的数据结构,基于该结构的算法设计可能会比较复杂一些。另外,数据结构是算法操作的基础,其选择要充分考虑算法的各种操作,与算法的操作相适应。
算法通常是决定程序效率的关键,但一切算法最终都要在相应的数据结构上实现,许多算法的精髓就是在于选择了合适的数据结构作为基础。在程序设计中,不但要注重算法设计,也要正确选择数据结构,这样往往能够事半功倍。