1. 陣列的隨機排列演算法及其簡單驗證
2.隨機演算法簡單分析
1. 陣列的隨機排列演算法及其簡單驗證
1.1 陣列的排列的隨機演算法的最終目的是達到,陣列每個元素在每個位置上出現的概率為1/n(其中n為陣列大小)。一種的演算法如下,對於陣列a中的每個元素a[i],隨機附上乙個權值,然後根據該權值對a陣列進行排序。下面是乙個簡單的實現,排序使用的是氣泡排序,**如下:
public
static
void
permutebysorting(
refint
a)//
根據key排序,這裡使用氣泡排序
inttmp;
for(
inti =0
; i
<
b.count;
++i)
for(
intj
=b.count -1
; j
>=
(i +
1);
--j)}}
1.2 另外一種陣列隨機演算法如下:遍歷陣列,隨機選擇陣列的另外的乙個元素,交換這兩個元素的位置。演算法比較簡單,實現**如下:
//就地排序
public
static
void
randomizeinplace(
refint
a)//
輸出結果
foreach
(int
item
ina)
2. 隨機演算法分析
隨機演算法中一種比較重要的分析方法是使用指示器分析法。定義變數如下:
定義樣本空間s
事件a
隨機變數指示器i
i(a)定義如下:
乙個簡單的使用隨機指示器變數的例子:我們都知道如果硬幣是均勻的話,投擲硬幣n次出現正面的可能次數是n/2,也就是說正面的出現次數和反面出現的次數在大量的統計上是相同的,下面我們從數學的方法去證明這個事實。
定義隨機變數x表示n次擲硬幣出現的正面的次數,該事件能夠分解成如下的xi,表示第i次投擲硬幣出現正面向上的事件。於是
兩邊取期望值:
即證明n次投擲硬幣的工程中,可能出現正面朝上的次數是n/2。通過上面的例子的分析可以看出最主要的是定義事件x,然後將事件x分解成較小子事件xi,最後求得x的期望值。利用上面的方法同樣呢能夠證明「生日悖論」等問題。
/files/xuqiang/random.rar
概率分析和隨機演算法
一 隨機分析 考慮乙個僱傭問題,面試n個人,在面試的過程中,只要更為優秀的人出現,就僱傭更為優秀的人,但是更換人選需要花費一筆費用c,現在估算這筆費用。這個問題相當於維護乙個當前的 獲勝者 最壞的情形當然是替換n次,那麼費用就會是cn.隨機的情況 第i個人比前i 1個人更為優秀的概率為1 i,那麼期...
演算法學習之概率分析與隨機演算法
說明 該文章內容我尚未理解深刻,此處僅作記錄 2.隨機演算法 隨機排列陣列 3 概率分析 假如你要雇用一名新的辦公助理。你先前的雇用嘗試都失敗了,於是你決定找乙個雇用 雇用 每天給你推薦乙個應聘者。你面試這個人,然後決定是否雇用他。你必須付給雇用 一小筆費用,以便面試應聘者 然而真正雇用乙個應聘者需...
隨機演算法 概率演算法
div出現在頁面的隨機位置var sheight jquery document.body outerheight true 100 var swidth jquery document.body outerwidth true 100 var div top getrandomnum 0,shei...