【程式設計師眼中的統計學(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原理&原始碼賞析(5)】net模組與通訊的實現
一. 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