算法【2】-汉诺塔&哈夫曼编码

1,汉诺塔问题

  汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

package com.cnblogs.mufasa;

public class Answer1_Hanoi {
    public static int Solution1(int i){//递归调用
        if(i==1){
            return 1;
        }else if(i==2){
            return 3;
        }else {
            return 2*Solution1(i-1)+1;
        }
    }

    public static int Solution2(int i) {//数学直接计算
        return (int) Math.pow(2,i)-1;
    }

    public static void Solution3(int i, String loc1, String loc2, String loc3) {//递归调用
        if (i == 1) {
            System.out.println("from " + loc1 + " to " + loc3);
            return;
        }
        Solution3(i - 1, loc1, loc3, loc2);//角色反转
        Solution3( 1, loc1, loc2, loc3);
        Solution3( i-1, loc2, loc1, loc3);
    }
}

2,哈夫曼编码【节省通信带宽】

  哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。

猜你喜欢

转载自www.cnblogs.com/Mufasa/p/11429643.html