zoukankan      html  css  js  c++  java
  • 《图解算法》读书笔记(一) 算法简介

    章节内容

    • 二分查找
    • 算法复杂度

    二分查找

    本书先以一个简单的查找算法开始讲起。
    我们知道对于一个列表,我们可以遍历列表中的每个元素,看是不是我们想要的。最糟的情况下,查找的次数等于列表元素的个数。
    如果是一个有序的元素列表,我们可以选择更佳的查找算法:二分查找。
    二分查找的算法思想:先从列表中间元素开始找,如果中间元素比目标大,则在前半部分列表中继续以这种方式查找;如果中间元素比目标大,则在前半部分继续以此方式查找,如果等于则找到。
    学过高中数学的人都知道,如果元素的个数为N个,则最糟情况下的查找次数为以2为底N的对数。
    java版二分查找代码如下:

    public static int recursionBinarySearch(int[] arr,int key,int low,int high){	
          if(key < arr[low] || key > arr[high] || low > high){
                return -1;				
          }
          int middle = low + (high - low) / 2;//初始中间位置
          if(arr[middle] > key){
                //比关键字大则关键字在左区域
                return recursionBinarySearch(arr, key, low, middle - 1);
          }else if(arr[middle] < key){
                //比关键字小则关键字在右区域
                return recursionBinarySearch(arr, key, middle + 1, high);
          }else {
                return middle;
          }	
    }
    

    大O表示法指出的是算法在最糟情况下的运行时间

    除最糟情况下的运行时间,也应该考虑平均情况的运行时间。
    算法的复杂度不是指时间,而是操作数的增速

    经常遇到的5种大O运行时间,从快到慢排序:

    • O(logn),也叫对数时间,这样的算法包括二分查找
    • O(n),也叫线性时间,这样的算法包括简单查找
    • O(n*logn),快排,归并排序
    • O(n^2),选择排序,插入排序,冒泡排序等排序算法
    • O(n!),旅行商问题
      PS:还有Floyd最短路径算法的时间复杂度是(n^3)

    旅行商问题

    旅行商问题是指一个旅行商需要前往N个城市,同时需要确保旅程最短。
    算法实现:计算每一种排序的总路程,再挑选出最短的路线。N个城市总共路线数有N!种,所以算法复杂度位O(n!)

    补充知识:

    旅行时问题属于NP问题。何为NP?在我们经常遇到的算法的时间复杂度为以上五种,它们的时间复杂度都可以用O(n^k)来表示,其中k是个常数。
    因此,这些算法都是多项式时间算法,能用多项式时间算法解决的问题被称为P问题(Polynomial)。
    无法用多项式时间解决的问题,比如旅行商问题(O(n!)),O(2^n)的算法成为NP问题(Non-deterministic Polynomial)

    小结

    1. 二分查找的速度比简单查找快得多
    2. O(logn)比O(n)快。需要搜索的元素越多,前者比后者就快的越多
    3. 算法运行时间并不以秒为单位
    4. 算法运行时间是从其增速的角度度量的
    5. 算法运行时间用大O表示法表示
  • 相关阅读:
    深度学习一:安装MXnet包,实现MNIST手写数体识别
    深度学习二:Neural art:用机器模仿梵高
    【Stanford CNN课程笔记】1. Image Classification and Nearest Neighbor Classifier
    PHP之图形处理
    Ubuntu14.10+cuda7.0+caffe配置
    CentOS系统上编译、安装、配置OpenCV
    安装MXnet包,实现MNIST手写数体识别
    Neural art:用机器模仿梵高
    String to Integer (atoi)
    Wildcard Matching
  • 原文地址:https://www.cnblogs.com/prelude1214/p/13580403.html
Copyright © 2011-2022 走看看