基本排序排序演算法

時空複雜度:冒泡排序:時間O(n^2),額外空間O(1)插入排序:時間O(n^2),額外空間O(1)選擇排序:時間O(n^2),額外空間O(1)基數排序:時間O(k*n)(k=logN_max),額外空間O(n)(臨時儲存)+O(B)(記數,B為基的大小)記數排序:時間O(n+k),額外空間O(k)希爾排序:時間O(n*logn^2),額外空間O(1)快速排序:時間O(n*log(n)),額外空間O(logn)(遞迴棧)歸併排序:時間O(n*log(n)),額外空間O(n)(臨時數組)+O(lo

快速求A^B演算法

把B用二進位表示:例如假如:B=101011B=2^5+2^3+2^1+2^0A^B = A^(2^5) * A^(2^3) * A^(2^1) * A^(2^0)= A^(2^5+2^3+2^1+2^0)=A^B所以可以從B的低位開始,迴圈並計算A^(2^0), A^(2^1), A^(2^2)....同時,並且判斷B的該位是否為1,如果為1,把當前計算的A^(2^i)累乘到結果中。int Func(int a, int b){ int p = a; int ans = 1;

牛頓迭代法求一個數的平方根

設r是f(x) = 0的根,選取x0作為r初始近似值,過點(x0,f(x0))做曲線y = f(x)的切線L,L的方程為y = f(x0)+f'(x0)(x-x0),求出L與x軸交點的橫座標 x1 = x0-f(x0)/f'(x0),稱x1為r的一次近似值。過點(x1,f(x1))做曲線y = f(x)的切線,並求該切線與x軸交點的橫座標 x2 = x1-f(x1)/f'(x1),稱x2為r的二次近似值。重複以上過程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n))

由環形隊列消鎖引發的思考

我想,很多的程式員都知道如何利用環形隊列來避免使用鎖。那就是,生產者只更改寫指標,消費者只更改讀指標。當然這裡的指標一般可能是整數下標。例如: read_pos為消費者更改的讀指標,每讀走一個元素 則 read_pos = (read_pos + 1) % SIZE,            write_pos為生產者更改的寫指標,每寫完一個元素, write_pos = (write_pos + 1) % SIZE,在消費者看來,只要隊列不空,就可以讀取當前讀指標處的元素,在生產者看來,只要隊列

狐狸與鴨子的問題

話說,一個圓形池塘,鴨子在池塘裡,狐狸在岸邊。鴨子只有遊到岸邊才能飛走。而狐狸想吃鴨子。但是狐狸又不會遊泳,只能在岸上跑。狐狸在岸上奔跑的速度是鴨子在水裡遊的速度的4倍,問鴨子怎樣才能飛走而不被狐狸吃掉。假設狐狸足夠聰明。一個可行的想法是,鴨子在池塘裡面遊小圈,而狐狸在面跑大圈,但是被鴨子越落越遠,之後當鴨子和狐狸處於最遠距離時,鴨子徑直遊向岸邊飛走,而狐狸要抓到鴨子得跑半圈,但是跑到鴨子起飛地點時,鴨子早就飛走了。那麼計算一下小圈半徑與大圈半徑的關係。鴨子必須越遊落下狐狸越遠,得出:r/R &

演算法設計新思路

        演算法設計,我們一般都從理論上去考慮一個演算法,即怎麼做才能使得時空複雜度最優。但是在實際情況下把一個演算法完美的實現是一件不容易的事情。所以搞理論的人千萬不要把實現演算法看成很輕鬆的事情,因為你的演算法可能根本在實際中沒有一個有效實現方法,而且即使能夠很容易的實現,可是由於實現的人不瞭解電腦的結構而使得演算法運行起來並不是令人滿意。例如如下的程式: 01 #include <stdio.h>02 #include <time.h>03 #define

開燈關燈問題

有編號1~100個燈泡,起初所有的燈都是滅的。有100個同學來按燈泡開關,如果燈是亮的,那麼按過開關之後,燈會滅掉。如果燈是滅的,按過開關之後燈會亮。現在開始按開關。第1個同學,把所有的燈泡開關都按一次(按開關燈的編號: 1,2,3,......100)。第2個同學,隔一個燈按一次(按開關燈的編號: 2,4,6,......,100)。第3個同學,隔兩個燈按一次(按開關燈的編號:

有N個數的數組,找出這個數組中的兩個數,使得這兩個數的和最接近0

有N個數的數組,沒有順序。現在的問題是讓你在數組中找出兩個數,使得這兩個數的和儘可能的接近0。想到的的方法是嘗試所有數對<xi,xj>的組合,之後找出其中和的絕對值最小的數對即可。但是這樣做的時間複雜度是O(N^2),有沒有更快一點的方法呢?這裡給出一個O(NlogN)時間複雜度的演算法。有一種比較直觀的做法。對數組排好序之後。如果數字全部是正數,那麼取最小的兩個數的和。如果數字全部是負數,則取最大的兩個數位和。如果數字有正有負。那麼我們必須枚舉每一個xi,之後用二分在數組中找小於等

高效能伺服器負載平衡的一個可行方案

面試官總愛問一些負載平衡的問題,不知道是他們真的遇到了還是自己意淫的。我只想說,在你否定別人的想法時,是否是真的認真考慮過別人的想法是不是比你的好。大概意思就是說多個使用者請求服務,伺服器是一個叢集,在客戶與伺服器之間加了一層負載平衡,使得每個使用者能夠正常請求服務,而且負載平衡機構可以把使用者的請求分到一個合適的伺服器上。這樣就能夠使伺服器能夠達到最佳的工作狀態。不過對於這種問題,大多數人給出的解決方案都是基於socket和Epool的,但是這種方案下,一台機器也就處理200-300Mbps的

做最真實的自己

我最近一直在想,我的人生價值用什麼來衡量?人與人是不同的,不能拿衡量別人的標準來衡量自己,我們不是產品。我們都有自己的個性,而個性是與生俱來了,你改變不了。當你試圖改變你的個性時,你其實在做無用功。因為你的內心本能的和你的行為在抗爭,即使你暫時壓制住你的個性,我覺得內心也是非常痛苦的。做最真實的自己,不要刻意模仿別人,那不是自己。順應自己的真實想法,展示自己。這樣才能有更多了樂趣,你才會更投入,獲得更大的成功。我將來可能做的事情:一:讀博士學位 二:當個老師(學校的還是非學校的都行)三:創業。

Sql結果匯出為excel檔案

  相信大家常常會遇到將SqlServer查詢結果匯出到Excel的問題。如果匯出的次數少,直接“Save Results As...”就是了;但是當要分別在每個表取樣,那就相當麻煩了。今天就為大家提供一個脫離office組件的可以將語句結果匯出到Excel的過程,希望會對大家有協助!---匯出到Excel---使用說明:-- 1.執行時所已連線的服務器決定檔案存放在哪個伺服器-- 2.遠程查詢語句中,要加上資料庫名--更新:-- 2013.01.05:

KMP演算法的動態規劃解說

理解我接下來所說的東西,需要大家懂得簡單的動態規劃。KMP大家都不陌生了,但是其中計算next數組總是搞不明白,我想有很多人和我一樣。所以這裡用動態規劃的思路去描述一下這個問題。模式串P=c[1]c[2]......c[n]先設幾個符號:suffix(S): S的所有尾碼的集合prefix(S): S的所有首碼的集合例如:suffix("abcd") = {"","d", "cd", "bcd"}         prefix("abcd") = {"","a", "ab", "abc"}看到,

“該如讓32位windbg找到正確的mscorwks mscordacwks sos?”

管理員達人,請慢些移出首頁,謝謝放到博問裡面,很久都沒有人回覆,所以放到首頁,請各位幫忙解答一下。 博問地址  http://home.cnblogs.com/q/23814/  機器A  開發機器  32位 xp  .netframwork3.5 產生平台 any cpu機器B  運行機器  64位 server2003 .netframework3.5  IIS6機器C  我的機器  32位  win7 .netframework4(沒有安裝.net3.5,僅僅裝了4) 32位windbg

戲談單向鏈表判環

大家都遇到過這個問題,就是如何判斷一個單鏈表是否有環?當然,判斷方法很多,但是目前網上最出名的那個方法大概是這樣:設甲、乙兩個指標指向同一起點,之後甲乙交替著走,甲每次走兩步,乙每次走一步,遇到下面的情況則說明鏈表有環:甲某次走完兩步後遇到了乙或者乙某次走完一步後遇到了甲。那麼大家想沒想過,為什麼甲每次走兩步,乙每次走一步這樣可以?如果甲每次走4步乙每次走2步可不可以?各種步長對時間複雜度有什麼影響?解釋這個問題需要一些點初等數論上的東西,基本上就是歐幾裡得和丟番圖方程的知識。插曲:丟番圖方程有

捉蟲記(二)GC導致的hang

本來第二篇早就該寫的,都準備寫一個while(true)導致高CPU的問題,但是那個dump不知道跑到哪裡了,害得我這段時間一直在找,這次的現象是,哥正準備出去泡個茶,突然業務經理嗷嗷直叫(終於找到一個Bug,能不興奮麼),一邊喊著處理不行了,一邊喊著趕緊重新啟動,哥沒有吱聲,默默開啟了效能計數器,看到處理常式的緩衝的確是慢慢在增長(這表示有積壓了),而處理速度降到非常低了,幾秒鐘處理一個(平時情況下哥的程式每秒鐘處理1000個Socket業務包是

隨機產生k個範圍為1-n的隨機數,其中有多少個不同的隨機數?

假如現在讓你隨機產生k個範圍在1-n內的隨機數,那麼你能得到多少個不同的隨機數呢?剛開始想得時候,我認為當k<=n時,可以得到k個不同的隨機數,但是顯然這個想法錯了。做了個實驗在1-1024內隨機產生500個數,其中只有394個不同的數,隨機產生1000個數,其中有639個不同的數。接下來是很枯燥的數學推導,如果你只是想看看最後的公式,那麼就看倒數第二行。如果你想看看推導過程那麼就看下去。下面說的東西用到了機率和組合數學中的線性常係數非齊次遞推關係。現在我們想求一下,隨機產生k個範圍在1-

HttpApplication 類 中的幾個事件的說明

 名稱 說明 AcquireRequestState 當 ASP.NET 擷取與當前請求關聯的目前狀態(如工作階段狀態)時發生。AuthenticateRequest 當安全模組已建立使用者標識時發生。AuthorizeRequest 當安全模組已驗證使用者授權時發生。BeginRequest 在 ASP.NET 響應請求時作為 HTTP 執行管線鏈中的第一個事件發生。Disposed 添加事件處理常式以偵聽應用程式上的 Disposed 事件。EndRequest 在 ASP.NET

free真的釋放記憶體了嗎?

不要天真的想程式中用了free之後,你的程式就會把記憶體還給了作業系統。從事C編程的人應該要知道,我們所用的malloc和free是由glibc提供的。glibc是一個具有系統級感覺的使用者級程式,負責管理記憶體堆區。所以到底把free的記憶體還給還是沒還給作業系統,大家還是看malloc和free的源碼比較好。現在就交大家測試一下malloc和free的方法。01 #include <stdlib.h>02 #include <stdio.h>03 04

新手學資訊檢索1:淺談資訊檢索

前記:本人是一個初學者,新手其實都算不上。沒做過資訊檢索,所以別人怎麼做的也不知道。很想知道Google,百度這樣的大公司怎麼做搜尋引擎的,但是沒機會也不會知道。憑著自己的理解就寫了這麼幾篇隨筆,這樣能督促自己思考,也希望得到大神們的指點。這個系列叫做“新手學資訊檢索”。這個系列說白了,就是把自己看過的東西總結了一下,加入了自己對資訊檢索一些概念的理解,沒什麼理論,也不注重於實現,更沒有創新。但是當時讓我費勁心思才能想明白的東西我會按照自己的意思把它講出來。不知道自己將會寫多少篇,可能總結完一些

程式出現這樣的問題,到底是誰的責任?

前一段時間,在項目裡遇到這樣一個問題。我提供了一些函數,比如A(),B(),C().....。之後其他人根據具體情況調用不同的函數。這些函數有一個共同點,就是調用方式非常相似。使用者可能會這樣使用這些函數if(condition == 1) A();else if(condition == 2) B();else if(condition == 3) C();else

總頁數: 61357 1 .... 8182 8183 8184 8185 8186 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.