Sedgewick的算法(第四版)随笔I

    最近三天晚上翻完了这本书的PARTI和PARTII,所有的代码都用JAVA实现了一遍,一本满分好书。

    PARTI非常值得一读,作者说清楚了algorithm和data structure的关系,手把手教你用JAVA内置数组和链表来实现Bag、Stack、Queue,并且给了一个Stack的常用实例:用双栈来实现算术表达式求值。接着作者讲了算法分析,并且给出了算法分析在工程中的意义。最后一小节用一个案例union-find来讨论解决计算机问题的具体步骤:1、定义问题,确定解决问题的ADT,定义一份API;2、实现一种初级算法,给出用例框架并将实际数据作为输入来验证初级算法;3、用经验性分析或数学分析来确定初级算法是否能解决当前输入规模的问题;4、如果初级算法不能解决当前规模输入的问题,改进算法。

    PARTII讲了Selection_sort、Insection_sort、Shell_sort、Merge_sort、Quick_sort、Heap_sort,作者不仅仅是教你如何实现这些经典算法,更告诉你如何优化这些经典算法,并且教你在面对不同输入规模的数据、不同特性数据时如何选择这些算法。你会知道为什么嵌入式系统中Shell_sort会被使用(因为简单但是效率高)、Heap_sort是唯一能够最优利用时间和空间的算法,他在最坏情况下保证用~2NlgN次比较和恒定额外空间就能完成排序,但是他只在嵌入式系统中常用,在现代系统中很少利用:因为他无法利用缓存、缓存未命中次数远远大于Quick_sort和Merge_sort。最后你会知道JAVA库中的Arrays.sort()是如何实现的:原始数据类型是Quick_sort,引用类型是Merge_sort(稳定排序),当你不需要稳定性而且内存要求比较高的时候你可以换成其他排序算法而不是简单的用Arrays.sort()。

    排序是很多商业计算、信息搜索、运筹学、数值计算、组合搜索和很多算法的基础。之前一直没完全理解,这本书算是给我开了窍。

你可能感兴趣的:(Sedgewick的算法(第四版)随笔I)