1. 程式人生 > >【程式設計師眼中的統計學(5)】排列組合:排序、排位、排

【程式設計師眼中的統計學(5)】排列組合:排序、排位、排

    /**
     * 獲取無重線排列總數目
     * 描述:從n個元數中選取m個元數進行全排列,得出一共有多少種排法
     * 公式:A(m,n)=m!/(n-m)!
     * 優缺點:輸入資料必須互不相同。求階乘時,使用了for迴圈,避免了遞迴方法導致記憶體溢位的風險。
     * (object陣列中元素總數為n,從object陣列中選出的m個數排列)
     * @param object    輸入可選元素
     * @param m            選取m個數排列
     * @return            輸出排列總數
     */
    public static BigInteger getCountByLine(Object[] object, long m) {
        long n = object.length;
        BigInteger result = MathUtils.factorial(n-m+1, n);//計算n-m+1到n的階乘
        return result;        
    }    
    /**
     * 獲取無重圓周排列數目
     * 描述:從n個數中選取m個數進行圓周排列,獲取一共有多少種排法
     * 公式:Q(m,n)=A(m,n)/m=m!/(m*(n-m)!)
     * 優缺點:輸入資料必須互不相同。m定義了int型別,限制了計算範圍。
     * (object陣列中元素總數為n,從object陣列中選出的m個數圓周排列)
     * @param object    輸入可選元素
     * @param m            選取m個數排列
     * @return            輸出排列總數
     */
    public static BigInteger getCountByCircle(Object[] object, int m) {
        int n = object.length;
        BigInteger result = MathUtils.factorial(n-m+1, n).divide(BigInteger.valueOf(m));//計算n-m+1到n的階乘除以m
        return result;
    }
    /**
     * 全排列(遞迴)
     * 例:輸入{1,2,3}輸出{1,2,3}{1,3,2}{2,1,3}{2,3,1}{3,1,2}{3,2,1}
     * 描述:輸入一個數組,對陣列中的所有元素進行全排列,把每種排列放入out集合中。
     * 優缺點:輸入資料必須互不相同。使用了遞迴的演算法,當輸入資料比較大時,會存在記憶體溢位的危險。
     * @param in    輸入資料
     * @param out    輸出資料
     * @param index 預設為0
     */
    public static void getAllPermutation(Object[] in, List<Object[]> out, int index) {
        if(index == in.length-1) {
            Object[] outTemp = in.clone();
            out.add(outTemp);
        }
        for(int i=index; i<in.length; i++) {
            swap(in,index,i);
            getAllPermutation(in,out,index+1);//遞迴
            swap(in,index,i);
        }
    }
    /**
     * 獲取所有排列
     * 例:輸入{1,2,3}輸出{1}{2}{3}{1,2}{2,1}{1,3}{3,1}{2,3}{3,2}{1,2,3}……
     * 描述:輸入一個數組,先從陣列中選取一個數全排列,再選取兩個兩個數全排列,再選取三個數全排列,把所有的得到的排列放入out集合中。
     * 優缺點:輸入元素必須互不相同。
     * @param in    輸入資料
     * @param out    輸出資料
     */
    public static void getSelectPermutaion(Object[] in, List<Object[]> out) {
        List<Object[]> outTemp = new ArrayList<Object[]>();
        for(int i=0; i<in.length; i++) {
            Combination.getCombination(in, outTemp, i+1);//獲取所有組合
        }
        for(int i=0; i<outTemp.size(); i++) {
            getAllPermutation(outTemp.get(i), out, 0);//對每種組合進行全排列
        }
    }
    /**
     * 交換下標為i,j兩個元素
     * 描述:對object陣列的i,j位置的元素進行交換
     * @param object
     * @param i
     * @param j
     */
    public static void swap(Object[] object, int i, int j) {
        Object temp = object[i];
        object[i] = object[j];
        object[j] = temp;
    }

相關推薦

程式設計師眼中統計學5排列組合排序排位

/** * 獲取無重線排列總數目 * 描述:從n個元數中選取m個元數進行全排列,得出一共有多少種排法 * 公式:A(m,n)=m!/(n-m)! * 優缺點:輸入資料必須互不相同。求階乘時,使用了for迴圈,避免了遞迴方法導致記憶體溢位的風險。

程式設計師眼中統計學3概率計算把握機會

/** * 計算條件概率 * * @param pOfA 概率P(A) * @param pOfAB 概率P(AB) * @return 概率P(B|A) */ public static float Cond

深入Java虛擬機器5多型性實現機制—靜態分派與動態分派

方法解析 Class檔案的編譯過程中不包含傳統編譯中的連線步驟,一切方法呼叫在Class檔案裡面儲存的都只是符號引用,而不是方法在實際執行時記憶體佈局中的入口地址。這個特性給Java帶來了更強大的動態擴充套件能力,使得可以在類執行期間才能確定某些目標方法的直接引

nodejs原理&原始碼賞析5net模組與通訊的實現

  一. net模組簡介      二. Client-Server的通訊      2.1 server的建立      2.2

程式設計師眼中統計學7正態分佈的運用正態之美

作者 白寧超 2015年10月15日18:30:07 摘要:程式設計師眼中的統計學系列是作者和團隊共同學習筆記的整理。首先提到統計學,很多人認為是經濟學或者數學的專利,與計算機並沒有交集。誠然在傳統學科中,其在以上學科發揮作用很大。然而隨著科學技術的發展和機器智慧的普及,統計學在機器智慧中的作用越來

程式設計師眼中統計學8統計抽樣的運用抽取樣本

作者 白寧超 2015年10月15日18:30:07 摘要:程式設計師眼中的統計學系列是作者和團隊共同學習筆記的整理。首先提到統計學,很多人認為是經濟學或者數學的專利,與計算機並沒有交集。誠然在傳統學科中,其在以上學科發揮作用很大。然而隨著科學技術的發展和機器智慧的普及,統計學在機器智慧中的作用越來

程式設計師眼中統計學6幾何分佈二項分佈及泊松分佈堅持離散

/** * 在n次伯努利試驗中,試驗r次才得到第一次成功的機率 P(X=r)=pq^{r-1} * @param p double型保留一位小數,表示成功的概率 * @param q double型保留一位小數,表示失敗的概率即1-p * @param r 整型,實驗次數 *

程式設計師眼中統計學12相關與迴歸我的線條如何?

作者 白寧超 2015年10月25日22:16:07 摘要:程式設計師眼中的統計學系列是作者和團隊共同學習筆記的整理。首先提到統計學,很多人認為是經濟學或者數學的專利,與計算機並沒有交集。誠然在傳統學科中,其在以上學科發揮作用很大。然而隨著科學技術的發展和機器智慧的普及,統計學在機器智慧中的作用越來

程式設計師眼中統計學6.1原創實現幾何分佈演算法以及應用

作者 白寧超 2015年8月14日16:07:23 摘要:本文繼統計學幾何分佈、二項分佈、泊松分佈研究的深入,基於各種分佈基礎概念和核心知識介紹之後。就各種分佈的實現和真實環境下應用方是目的。本文就演算法文件規範和程式碼註釋進行梳理,利用其基本核心演算法,實現我們要達到的目的。大家通用的一些統計

程式設計師眼中統計學2集中趨勢度量分散性變異性強大的距

// 用於統計輸入了多少資料 static int n = 0; static String a1[]; static int b1[]; /** * @Title: set * @Description: 資料賦值 *

程式設計師眼中統計學6.2原創實現二項分佈演算法以及應用

package DistTools; /** * * @(#)GeoDist.java * @Description:描述:本演算法中在n次伯努利試驗中:試驗n次得到r次成功的概率、二項分佈的期望、二項分佈方差的具體實現。 * @Definitions:定義:在相互獨立事件中

程式設計師眼中統計學11卡方分佈的應用

作者 白寧超 2015年8月9日22:33:00 摘要:程式設計師眼中的統計學系列是作者和團隊共同學習筆記的整理。首先提到統計學,很多人認為是經濟學或者數學的專利,與計算機並沒有交集。誠然在傳統學科中,其在以上學科發揮作用很大。然而隨著科學技術的發展和機器智慧的普及,統計學在機器智慧中的作用越

程式設計師眼中統計學9總體和樣本的估計進行預測

作者 白寧超 2015年10月15日18:30:07 摘要:程式設計師眼中的統計學系列是作者和團隊共同學習筆記的整理。首先提到統計學,很多人認為是經濟學或者數學的專利,與計算機並沒有交集。誠然在傳統學科中,其在以上學科發揮作用很大。然而隨著科學技術的發展和機器智慧的普及,統計學在機器智慧中的作用越來

程式設計師眼中統計學4離散概率分佈的運用善用期望

/** * @ClassName ScoreUtil * @Description 分數處理工具類 * @author candymoon * @Date 2014-4-25 */ public class ScoreUtil { /** * 使用jav

程式設計師眼中統計學1資訊圖形化第一印象

package pictuer; import java.awt.Dimension; import java.awt.Font; import java.io.PrintStream; import java.text.DecimalFormat; import java.text.Simpl

python 歷險記——一個 Java 程式設計師的告白

引言 想學爬蟲還是 python 專業啊,之前一直在用 java, 現在決定嚐嚐鮮,使用 python及爬蟲框架來完成網路資料採集。 程式語言之間都是相通的,比如都需要模組化,引入其他檔案來實現功能,使用列表等容器來處理資料,都要使用 json 或 xml 來解析和傳輸資料。 你會發現通過 類比 的方式,帶

我的程式設計師之路開篇

高中的時候,有次學校開了一個計算機語言培訓班,學費也不貴,學的是BASIC,第一次去試聽,老師講了a,b的值互換問題和進位制之間轉換問題,我聽得頭都大了,想不到還有這樣一種高中生都難以理解的東西,直到高考結束,成績還不錯,報考的是哈工大威海校區的軟體工程專業。 我不知道等待我的是什麼樣的難題

java常見面試題Java程式設計師面試題

不知不覺中,已經將面試題更新到第六篇了,龐大的java面試題庫,想要刷完似乎不大可能,需要一點一點的積累。 1、java 中會存在記憶體洩漏嗎,請簡單描述。   答:會;存在無用但可達的物件,這些物件不能被GC 回收,導致耗費記憶體資源。 2、靜態變數和例項變數的區別?

微信小程式開發文件5

微信小程式開放介面: 生物認證 getUpdateManager 拓展介面 createWorker 開啟/關閉除錯 微信小遊戲工具: 設定頁介面 專案頁卡介面 開發快捷鍵 開發工具除錯 命令列呼叫 HTTP 呼叫 微信小遊戲渲染API: 畫布物件Canvas Canvas(畫布物件

關於Google神牛Jeff Dean的笑話,非程式設計師勿入

During his own Google interview, Jeff Dean was asked the implications if P=NP were true. He said, “P = 0 or N = 1.” Then, before the interviewer had ev