一篇小的隨筆,關於記憶算法和概念

問題由來是一位非計算機專業的同窗初學算法課,在一些虛擬情景下解題很是地頭疼而出現的。
頗有意思的是,從回答他的問題中,我也從新思考了一些問題。算法

Try to create a useful algorithm that takes
O(n^2) for the worst case
Omega(1) for the best case
Theta(log(n)) for the average

當寫到這題的時候,我沒多想就寫了一連串if else,而後往裏面填充算法。
可當我試圖引導我同窗作這道題時,出現瞭如下對話segmentfault

」你怎麼會用sorting(分類)的算法呢?「
」爲何不能用sorting啊?「
」由於sorting最快average也要O(Nlog(N))啊。「
」爲何啊?「code

因而我給他看了sorting算法的表格。雖然解決了問題,但仍是不能解決」爲何「啊。說實話,一開始,我也只是把這算法當作規律給記下來了。爲何sorting就不能更好了呢?是否有更好的方法來證實這個呢?排序

因爲數學公式在segmentfault上仍是很難編輯,我這裏給一個連接好了。get

可是彷佛仍是太複雜了一點,仍是死記硬背的把O(Nlog(N))記下來了。數學

我在想,是否可以這麼思考問題。假設,咱們只須要找到數的相同數在一個排序好的N元素的array中,假設咱們並不知道這個數是否爲哪一個特定index上,但必然在array中,那很簡單,最快的average是O(log(N))。其次,咱們要找到第二個這樣的數,仍然是O(log(N))。不斷循環這個問題,那最後就出現了O(Nlog(N))的排列,而後,咱們將這個組合打亂。其實是個依次逐步的反向過程。雖然打亂組合顯然沒有必要去一個一個找數。但這個反向過程確是正向過程的最佳方式。(我以爲這兩個過程應該能夠用數學證實,惋惜如今尚未這個能力。)it

------------------------------------------------------------分割線-------------------------------------------------------------
另外一個問題,多大的機率狀況下,咱們須要開始考慮機率是否會影響算法。
這也是來自同窗對話,但我卻很是在乎。爲何咱們總沒有一個肯定性的定義劃分,認爲多大的機率可能會影響算法,或者說,直接將機率引進入算法中。例如,在排列好的一組從0到n取出的N個數中,用binary search找到特定數,而後greedy search找重複數。那若是出現n個數都是重複數,這個算法就變成了O(N)。可是出現這個的機率爲1/n^N。因此才能夠近乎不記。是否應該定義但機率的倒數小於big O的數量級時,認爲該算法會受到影響。
------------------------------------------------------------分割線-------------------------------------------------------------
這篇隨筆實在是很是粗淺,原本想把最近本身看的AKS算法和一些並行運算算法的知識介紹一下。但仍然沒能找到一種很好的方式來敘述。最近有可能要參加ACM,因此暫時就這樣吧。pdf

相關文章
相關標籤/搜索