zoukankan      html  css  js  c++  java
  • Algorithms 4th

      欢迎交流

      1.1.26

    public class TestApp {
        public static void main(String[] args) {
    
            int a = StdIn.readInt();
            int b = StdIn.readInt();
            int c = StdIn.readInt();
            int t;
    
            if( a > b) {
                t = a;
                a = b;
                b = t;
            }
    
            if( a > c) {
                t = a;
                a = c;
                c = t;
            }
    
            if( b > c) {
                t = b;
                b = c;
                c = t;
            }
    
            StdOut.println(a + "->" + b + "->" + c);
        }
    }

       1.1.27

    public class Binomial {
        /**
         * 递归方式的二项分布
         * @param N 总次数
         * @param k 出现次数
         * @param p 每次出现概率
         * @return
         */
        public static double binomial1(int N, int k, double p) {
            if(N == 0 && k == 0)
                return 1.0;
            if(N < 0 || k < 0)
                return 0.0;
            return (1.0 - p) * binomial1(N - 1, k, p) + p * binomial1(N - 1, k - 1, p);
        }
    
        public static double binomial2(int N, int k, double p) {
            double[][] b = new double[N + 1][N + 1];
            // base
            for(int i = 0; i <= N; i++) {
                b[i][0] = Math.pow(1.0 - p, i);
            }
            b[0][0] = 1.0;
            // recursive
            for(int i = 1; i <= N; i++) {
                for(int j = 1; j <=k; j++) {
                    b[i][j] =  p * b[i - 1][j - 1] + (1.0 - p) * b[i - 1][j];
                }
            }
            return b[N][k];
        }
    
        public static void main(String[] args) {
            int N = 100;
            int k = 50;
            double p = 0.76;
            StdOut.println(binomial1(N, k, p));
            StdOut.println(binomial2(N, k, p));
        }
    }

      1.1.28

      想不出与BinarySearch有关的去重方法。

      1.1.29

    // returns the number of elements that are smaller than the key
        public static int rank(int key, int[] a) {
            int lo = 0;
            int hi = a.length - 1;
            while(lo <= hi) {
                int mid = (lo + hi) / 2;
                if(key < a[mid])
                    hi = mid - 1;
                else if(key > a[mid])
                    lo = mid + 1;
                else {
                    while(a[mid - 1] == key) {
                        mid -= 1;
                    }
                    return mid;
                }
            }
            return -1;
        }
    
        // returns the number of elements equal to the key
        public static int count(int key, int[] a) {
            int lo = 0;
            int hi = a.length - 1;
            while(lo <= hi) {
                int mid = (lo + hi) / 2;
                if(key < a[mid])
                    hi = mid - 1;
                else if(key > a[mid])
                    lo = mid + 1;
                else {
                    lo = mid;
                    hi = mid;
                    while(a[lo - 1] == key) {
                        lo -= 1;
                    }
                    while(a[hi + 1] == key) {
                        hi += 1;
                    }
                    return hi - lo + 1;
                }
            }
            return 0;
        }
  • 相关阅读:
    python之新手一看就懂的小说爬虫
    Mysql与Oracle区别
    Java面试2018常考题目汇总(一)(转)
    单例式的优缺点和使用场景
    设计模式之单例模式通俗理解
    IntelliJ Idea 最常用快捷键
    sql语句基础和提升
    Tomcat 安装配置
    Git基本常用命令
    Java练手题
  • 原文地址:https://www.cnblogs.com/Azurewing/p/4044108.html
Copyright © 2011-2022 走看看