算法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

posted @ 2020-12-03 18:12  diameter  阅读(81)  评论(0编辑  收藏  举报