最佳約會策略(在線算法)
問題: 有n個數字,要求你在線的選擇其中一個最大的,在選擇第i個之前,你知道前i-1次的數字是什么,但是無法知道你將要選擇的數字和以后待選的數字的大小。
一個很自然的策略是選定一個K,先看一下前k個的大小,不做任何選擇,然后繼續看,知道遇到一個比這之前的k個人還好。可以證明k= n/e 的時候,能夠獲得最好的選擇,能夠選擇到最大的那個。證明其實是比較簡單的。假設在我們的某次選擇中,選擇第i個是最優選擇,那么很顯然第i個必須是這n個數中最大的,那么此時的概率是1/n,第二個要求是前k個數中存在這i個數中次大的數,否則是不會選擇第i個的。此時的概率是k/i-1,所以把第k個到第n個累加起來就OK了,然后取得次數的最大數,可以計算獲得k=n/e。
很顯然這個問題是一個在線算法的問題,無法預知之后的情況,邊輸入邊進行處理。而離線算法是要求當輸入完成之后,然后進行輸出。 在線算法的目的就是能夠達到離線算法的一樣好的效果。
題目來源:
http://zhiqiang.org/blog/science/tcs-classroom-notes-the-best-dating-strategy.html
http://www.cnblogs.com/fll/archive/2008/06/01/1211569.html