美文网首页
《算法》第4版 读书笔记 01

《算法》第4版 读书笔记 01

作者: 用行舍藏 | 来源:发表于2017-10-24 21:56 被阅读0次

基础

java编程模型、数据抽象、基本数据结构、集合类的抽象数据类型、算法性能分析的方法

解决大型问题或大量小型问题,有效利用时间和空间。

欧几里得算法的java语言描述(求p和q的最大公约数):

public static int gcd(int p,int q){
  if(q == 0) return p;
  int r = p % q;
  return gcd(q,r);
}

基础编程模型

java基本结构:原始数据类型、语句(声明、赋值、条件、循环、调用和返回)、数组、静态方法、字符串、标准输入\输出、数据抽象。

数组实现方阵相乘 a[][] *b[][] = c[][]:

int N = a.length;
double[] [] c = new double[N][N];
for(int i = 0;i < N;i++)
  for(int j = 0;j <N;j++)
    for(int k = 0;k<N;k++)
        c[i][j] += a[i][k] * b[k][j]
}

将一个数组变量赋予另一个变量,那ing个变量会指向同一个数组,想要复制数组要声明、创建并初始化一个新的数组,然后将元素挨个赋值:

int[] a = new int[N];
a[i] = 1234;
int[] b= a;
b[i] = 5678;   //a[i]的值也为5678

素数判断:

public static boolean isPrime(int N){
    if(N < 2) return false;
    for(int i = 2; i*i <=N;i++){
        if(N % i == 0) return false;
    }
    return ture;
}

计算平方根(牛顿迭代法)

public  static double sqrt(double c){
  if (c<0) return Double.NaN;
  double err = 1e-15;
  double t = c;
  while(Math.abs(t - c/t) > err * t)
    t = (c/t + t) / 2.0;
   return t;
} 

递归最重要的三点:

  1. 总有一个最简单的情况。
  2. 总是尝试调用解决一个规模更小的子问题
  3. 父问题和子问题之间不应该有交集
二分查找的递归实现:(数组必须是有序的)
public static int rank(int key ,int[] a){
    return rank(key,a,0,a.length-1);
}
public static int rank(int key, int[] a,int low,int high){
    if(low > high)  return -1;
    int mid = low + (high - low) / 2;
    if(key < a[mid]) return rank(key,a,low,mid-1)
    else if(key > a[mid]) return rank(key,a,mid+1,high)
    else return mid; 
}
一般实现:
public static int rank(int key, int[] a){
    int low = 0;
    int high = a.length - 1;
    while( low < high){
    int mid = low + (high - low) / 2;
    if(key < a[mid]) high = mid - 1;
    else if(key > a[mid]) low = mid + 1;
    else return mid;
   }
    return -1;
}

API的目的是将调用和实现分离

Math.abs(-2147483648)   //整数溢出结果为 -2147483648
double初始化为无穷大数 :Double.POSITIVE_INFINITY和Double.NEGATIVR_INFINITY.
1/0除零异常 ,1.0/0.0 值为 Infinity.

相关文章

  • 读书笔记

    读书笔记/人生算法之无知、衰朽和贪婪 【标题】人生算法之无知、衰朽和贪婪 【书籍】人生算法 【01】人生算法之无知...

  • 读书笔记

    读书笔记/人生算法十八关之片面、狭隘与模糊 【标题】人生算法十八关之片面、狭隘与模糊 【书籍】人生算法 【01】人...

  • 读书笔记

    读书笔记/人生算法十八关之孤独、爆仓、迷信 【标题】人生算法十八关之孤独、爆仓、迷信 【书籍】人生算法 【01】人...

  • 读书笔记

    读书笔记/人生算法十八关之第四-九关 【标题】人生算法十八关之四到九关 【书籍】人生算法 【01】人生算法十八关之...

  • 读书笔记

    读书笔记/人生算法十八关之第十——十二关 【标题】人生算法十八关之第十——十二关 【书籍】人生算法 【01】人生算...

  • 读书笔记

    读书笔记/人生算法九段之0-2段 【标题】人生算法九段之0-2段 【书籍】人生算法 【01】完美主义是闭环的绊脚石...

  • 一文弄懂计数排序算法!

    这是小川的第385次更新,第413篇原创 01 计数排序算法概念 计数排序不是一个比较排序算法,该算法于1954年...

  • 《算法图解》note 7 狄克斯特拉算法

    这是《算法图解》的第7篇读书笔记。其主要内容是简述狄克斯特拉算法。 1.狄克斯特拉算法简介 迪克斯特拉(dijks...

  • 《算法》第4版 读书笔记 01

    基础 java编程模型、数据抽象、基本数据结构、集合类的抽象数据类型、算法性能分析的方法 解决大型问题或大量小型问...

  • 《python算法教程》Day3 - 递归

    这是《python算法教程》的第3篇读书笔记。由于之前看书的效率太低了,所以拖了一个多星期才写第三篇读书笔记。这次...

网友评论

      本文标题:《算法》第4版 读书笔记 01

      本文链接:https://www.haomeiwen.com/subject/ophzuxtx.html