算法4第一章 基础
算法定义:
编写一段计算机程序一般都是实现一种已有的方法来解决某个问题。 这种方法大多和使用的编程语言无关--它适用于各种计算机以及编程语言。是这种方法而非计算机程序本身描述来解决问题的步骤。在计算机科学领域,我们用算法这个词来描述一种有限、确定、有效的并适合用计算机程序来实现的解决问题的方法。
我们关注的大多数算法都需要适当地组织数据,而为了组织数据就产生了数据结构,数据结构也是计算机科学研究的核心对象,它和算法的关系非常密切。我们的观点是数据结构是算法的副产品或是结果,因此要理解算法必须学习数据结构。
递归:
1、递归总有一个最简单的情况--方法的第一条语句总是一个包含return 的条件语句
2、递归调用总是去尝试解决一个规模更小的子问题,这样递归才能收敛到最简单的情况。
3、递归调用的父问题和尝试解决的子问题之间不应该有交集。
模块化编程:
1、 程序整体的代码量很大时,每次处理的模块大小仍适中。
2、可以共享和重用代码而无需重新实现。
3、很容易用改进的实现替换老的实现。
4、可以为解决编程问题简历合适的抽象模型。
5、缩小调试范围。
二分查找
public int binarySearch(int[] nums, int target, int begin, int end) { if (nums.length == 0 || begin > end) { return -1; } int mid = begin + (end - begin) / 2; if (nums[mid] == target) { return mid; } else if (nums[mid] > target) { return binarySearch(nums, target, begin, mid - 1); } else { return binarySearch(nums, target, mid + 1, end); } } public int binarySearch_1(int[] nums, int target) { if (nums.length == 0) { return -1; } int begin = 0; int end = nums.length - 1; while (begin <= end) { int mid = begin + (end - begin) / 2; if (nums[mid] == target) { return mid; } else if (nums[mid] > target) { end = mid - 1; } else { begin = mid + 1; } } return -1; }
不成熟的优化是所有罪恶之源。
参考资料
算法4 Robert Sedgewick