算法基础知识
最近在看《数据结构与算法分析——c语言描述》,做一下笔记。
1.首先要明确算法之所以存在是基于这样的一个观念:有时候写出一个可以工作的程序并不够,如果在巨大的数据集上运行,运行时间是一个重要的问题(在这之前正确性是最重要的)(当然在数据规模小或个人使用时可以很大程度忽略这个问题,效率低下也比人去做轻松多了)。需要指出速度是相对的,不同的机器上一样的算法速度不一样。
2.递归。当一个函数是由自己来定义时就称为是递归。
关于递归的一个常见问题是它是否是循环逻辑? 简单的说通过f(5)得到f(5)才是循环的,通过f(4)得到f(5)不是。
关于递归有四条基本原则:
1.基准情况:必须有一些基准的情况不需要递归就可以求解。
2.不断推进:递归调用必须总能向产生基准情形的方向推进。破坏这条法则最坏的情况是死循环。
3.设计法则:假设所有递归调用都能运行。这意味着设计递归程序时没有必要知道大量递归调用的细节(递归的主要问题是隐含的记录开销)
4.合成效益法则:在求解同一问题的同一实例时切勿在不同的递归调用中做重复性工作。