2018/11/27
01 引言
图1-1中的一些简单的范例,列出了一些经典的算法和数据结构(比较基础的)。对问题建模,就是将你所要解决的问题进行抽象,转化为一个这种基础的数据结构,然后应用相应的算法。
上面说的这个这个过程,本质上就是学习算法与数据结构的精髓。将问题抽象、分解,转化为相应的基础的内容。特别是可以分解为已经被人解决过的经典问题。而我原来一直不得要领的部分,就是不理解为什么要学习算法和数据结构。这之中的原因,不仅仅是学习的目的不对,同样是因为没有问题的环境让我来操作。
本篇就对这部分问题建模的过程进行总结,并记录自己的一些想法。
个人理解:算法与数据结构是息息相关的,这也是我看了很多材料得出的结论。学习基础的数据结构,还要学习其伴生的算法。下一节列出一些基础的数据结构,与之相关的算法自行查询。这里指的数据结构应该是抽象出来的数学上的一种概念,跟以往算法书上的有相似也有不同,不要从内存上的空间组织来理解。
阅读材料:《算法设计手册》,1.4章节
(在阅读这个材料的初衷,是我对机器学习中数据预处理部分的疑惑;但是看完这个材料,我明白自己找错了,我关心的部分应该是属于数据分析部分的内容。当然,本身也是要学习算法的,就把这部分内容给看了)
02 基础数据结构
(这部分内容,让我自己来组织语言的话,还不如直接使用书中的图片。)
这些数据结构是一些基础的内容,以往已经看了很多次这些书,其中树和图看的比较多,但都没有掌握。《算法设计手册》中这部分内容的标题是组合对象;还有一个小节,名字叫做递归对象,这其实也是很多书介绍的重点,比较遗憾的就是他们介绍的时候都没有真正意义上的把递归的作用给讲好,不如这部分书让人易理解。
我个人觉得,递归的作用有两个,一个是组织数据的形式,另一个就是算法运作过程中的原理。
03 总结
问题建模本身没有多少关键的东西,而是它的这种思想,它将很多种的数据类型罗列一个大的参考库,让实践者可以从中匹配自己的应用。当无法匹配的时候,也不要恐惧。我觉得任何问题大致上都可以分解为这些基础的内容,如果每匹配,可以继续分解来达到目的。
引用列表
- what is a model problem
- S. S. Skiena, The algorithm design manual, 2nd ed. London: Springer, 2008.
(完成于2018/11/27)