关于算法和数据结构精华问答

所有的算法,乃至数学在实际运用中都是要根据不同的数据来选择不同的方法,所以一般学习过算法和数据结构的人都会越发的认识到,数据才是程序的中心,只有找到了一个组织数据的最佳方式,算法的运用才会事半功倍。

一、很多时候的研究内容是算法改进,请问算法改进常见的切入点是什么呢?怎么着手进行算法改进呢?如何判断算法改进是否成功?

A:算法改进最重要的是要找到原算法的瓶颈所在,然后做针对性的改进。计算机科学家安德鲁艾派尔改进优化程序性能的例子属于是程序性能调优上的经典案例,可以发现其中数据结构和算法的调整起到了至关重要的作用。改进(算法采用的)数据结构本身也是改进算法的一种形式。最终,可以用新算法同原算法做对比试验来证明新方法更厉害。安德鲁的试验中,他把原来需要计算1年的程序改到了只用1天!1VS1天,效果是显而易见的。

二、假设遇到一个现实问题,怎样选择合适的数据结构和算法?是不是现实世界的所有问题的解决方法都已经存在相应的数据结构和算法了?

A:因为算法和数据结构是相辅相成的关系,二者无法相互脱离而单独存在。所以所谓面对一个现实问题如何选择数据结构,就可以变成,面对一个现实问题如何设计一个算法。当针对问题解决而设计出算法之后,数据结构就自然而然的蕴含在算法之中了(因为相应的结构将是你算法所必须的)。此外,现实世界的所有问题的解决方法都已经存在相应的数据结构和算法了,答案是否定的。仍然还是有很多问题,可能也有相应的结构来支持算法,但是人们仍然在寻求更高效的结构,而且这个过程从未停止。一个典型的例子就是多维数据访问(Multi-dimensional data access)问题中的高级数据结构问题。

三、算法与数据结构有什么关系?

A:计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:信息的表示,信息的处理。而信息的表示和组织又直接关系到处理信息的程序的效率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。因此,为了编写出一个的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容。数据的结构,直接影响算法的选择和效率。计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法 。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。

四、为什么要有数据结构?

A:因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U……)或内存(ROMRAMSRAM……)里面的二进制字节数组中。然后让CPU这个只会执行预先保存好的加减乘除移位条件转移等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。

五、如何学好算法和数据结构?

A:想象一下你有一条非常非常长的纸条。这张纸条只能写一行字。现在要你把一些描述现实世界的东西写在这张纸条上。然后把这张纸条给别人。别人通过这张纸条重构你所描述的世界,或者在里面查找、推演出自己所需要的信息。

1.这张纸条就是信息的载体,包括硬盘、内存、磁盘、甚至磁带说白了他们都是一张转着圈或者拐着弯的纸条。

2.给别人的过程就是读写硬盘过程、网络传输过程等等……

3.数据结构所解决的问题就是,怎么用一行字啰里八嗦的把这些东西描述出来,别人怎么读懂这些啰里吧嗦的东西

4.编程,就是怎么解决3,怎么解决3之后解决重构出来的世界的一些具体问题

简单的说,只要把你的世界观从三维转到一维,你就能学懂数据结构了,结构是人为的规则,书里讲的数据结构,是数据组织最基本的规则。还有各种各样的数据标准,文件格式,只不过是更高级别的数据组织规则。