2015-01-08 82 views
0

HERE是geeksforgeeks解決方案。我無法理解findCeil()部分。 第四步:在前綴數組中找到第三步生成的隨機數的Ceil索引。讓索引爲indexc。任意概率分佈方式的隨機數發生器

// Utility function to find ceiling of r in arr[l..h] 
int findCeil(int arr[], int r, int l, int h) 
{ 
    int mid; 
    while (l < h) 
    { 
     mid = l + ((h - l) >> 1); // Same as mid = (l+h)/2 
     (r > arr[mid]) ? (l = mid + 1) : (h = mid); 
    } 
    return (arr[l] >= r) ? l : -1; 
} 

有人可以請解釋正在做什麼。

+2

有什麼特別的東西你不明白嗎?也許是「>>」或「?」。在不縮小查詢範圍的情況下,您將得到如下答案:「首先,它聲明一個名稱爲」mid「的整數...並且您將重新獲得已讀過的內容。 – Kevin

+0

對不起。我打算問一下findCeil的目的是什麼。什麼是findCeil在這裏做什麼。舉個例子 – Walt

回答

1

它正在執行數組的binary search以查找數組的第一個元素的值大於r。該wiki文章應該很好地解釋技術。

編輯:Here's an animation of an example search

+0

嗨凱蒂。謝謝。你是否準備面試和/或工作? – Walt

+0

今天我有很多十分鐘的編譯,所以我在這裏花了太多時間在這裏,只是碰巧看到你的問題經過。但我認爲我們不應該使用這個空間聊天。 :-) – Katie