演算法講解
A. 演算法怎麼學
貪心演算法的定義:
貪心演算法是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,只做出在某種意義上的局部最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。
解題的一般步驟是:
1.建立數學模型來描述問題;
2.把求解的問題分成若干個子問題;
3.對每一子問題求解,得到子問題的局部最優解;
4.把子問題的局部最優解合成原來問題的一個解。
如果大家比較了解動態規劃,就會發現它們之間的相似之處。最優解問題大部分都可以拆分成一個個的子問題,把解空間的遍歷視作對子問題樹的遍歷,則以某種形式對樹整個的遍歷一遍就可以求出最優解,大部分情況下這是不可行的。貪心演算法和動態規劃本質上是對子問題樹的一種修剪,兩種演算法要求問題都具有的一個性質就是子問題最優性(組成最優解的每一個子問題的解,對於這個子問題本身肯定也是最優的)。動態規劃方法代表了這一類問題的一般解法,我們自底向上構造子問題的解,對每一個子樹的根,求出下面每一個葉子的值,並且以其中的最優值作為自身的值,其它的值舍棄。而貪心演算法是動態規劃方法的一個特例,可以證明每一個子樹的根的值不取決於下面葉子的值,而只取決於當前問題的狀況。換句話說,不需要知道一個節點所有子樹的情況,就可以求出這個節點的值。由於貪心演算法的這個特性,它對解空間樹的遍歷不需要自底向上,而只需要自根開始,選擇最優的路,一直走到底就可以了。
話不多說,我們來看幾個具體的例子慢慢理解它:
1.活動選擇問題
這是《演算法導論》上的例子,也是一個非常經典的問題。有n個需要在同一天使用同一個教室的活動a1,a2,…,an,教室同一時刻只能由一個活動使用。每個活動ai都有一個開始時間si和結束時間fi 。一旦被選擇後,活動ai就占據半開時間區間[si,fi)。如果[si,fi]和[sj,fj]互不重疊,ai和aj兩個活動就可以被安排在這一天。該問題就是要安排這些活動使得盡量多的活動能不沖突的舉行。例如下圖所示的活動集合S,其中各項活動按照結束時間單調遞增排序。
關於貪心演算法的基礎知識就簡要介紹到這里,希望能作為大家繼續深入學習的基礎。
B. 五子棋人工智慧演算法講解
五子棋演算法可簡可繁,要看你對自己五子棋程序智能的要求, 人機對戰的意思就是人和電腦下,也就是說電腦會思考如何下棋....其實這才是五子棋程序的核心.如果只實現人與人對戰的話,是一件很簡單的事情,無非就是繪制棋盤,然後繪制下棋的效果,再寫個下棋合法性判斷,勝負判斷....大概就搞定了....所以核心其實是人機對戰的電腦那部分人工智慧.這東西吧,可以研究的很多,不過主要的幾個設計要點就是搜索演算法和估值演算法,這兩個是最主要的,還有提高電腦思考銷率的方法就有多cpu的計算機多線程思考的設計....通過一些手段讓電腦變得更像人類棋手的,例如利用一些遺傳演算法之類的讓電腦具有學習能力,可以在失敗中吸取教訓,開局庫,歷史啟發之類的一大堆......但是總而言之,這一系列演算法的設計沒有一個標准,只要能讓你的電腦下棋下的更聰明,更快那就是好演算法.國內有一個叫王曉春的寫過一本叫<<pc游戲編程( 人機博弈)>>的書,這是一本研究人機博弈程序很經典的書,書的後面還附了一個五子棋的程序實例,你可以參考一下.下面是csdn的下載地址,你也可以自己去搜一下.http://download.csdn.net/source/1925326
C. LOD 演算法詳解
層次細節技術(Level Of Detail,LOD):可見性裁剪技術對遮擋程度高的
場景比較高效,但當場景中的可見幾何體數量巨大時,可見性裁剪演算法就無法簡化
場的規模和復雜度。層次細節技術就是為簡化場景中可見幾何體的多邊形細節而
提出的一類加速演算法。按照視覺重要性原則,距離視點越遠的幾何體在顯示屏幕
上投影面積越小,對視覺感官的貢獻越少,因此一個自然的加速繪制方法是對近
處幾何體充分繪制詳細的幾何細節,而對遠處的幾何體則大幅度地進行簡化,繪
制較為粗糙的幾何細節,這就是層次細節技術的出發點。層次細節技術的主要難
點在於如何快速構建並選擇幾何體的多次層次細節模型,以及不同層次細節之間
的自然過渡。
D. KPM演算法的詳細講解。(求next值的演算法為重點講解,謝謝)
CSDN詳解: 如下三個解答,一個不懂繼續看另一個,希望你能明白。。 http://blog.csdn.net/twinsouli/archive/2008/05/17/2454699.aspx http://topic.csdn.net/t/20050405/00/3908936.html http://blog.csdn.net/skyaspnet/archive/2008/07/25/2711727.aspx
E. 請介紹一本專門講解c語言演算法的書。
清華大學出版社出版的《數據結構》(C語言版),挺基礎的他還有一本配套練習冊。現在最新的是第三版
F. Seal加密演算法講解
Panama, Salsa20, Sosemanuk
AES and AES candidates AES (Rijndael), RC6, MARS, Twofish, Serpent, CAST-256
IDEA, Triple-DES (DES-EDE2 and DES-EDE3), Camellia, RC5, Blowfish, TEA, XTEA, Skipjack, SHACAL-2
VMAC, HMAC, CBC-MAC, DMAC, Two-Track-MAC
SHA-1, SHA-2 (SHA-224, SHA-256, SHA-384, and SHA-512), Tiger, WHIRLPOOL, RIPEMD-128, RIPEMD-256, RIPEMD-160, RIPEMD-320
RSA, DSA, ElGamal, Nyberg-Rueppel (NR), Rabin, Rabin-Williams (RW), LUC, LUCELG, DLIES (variants of DHAES), ESIGN
PKCS#1 v2.0, OAEP, PSS, PSSR, IEEE P1363 EMSA2 and EMSA5
Diffie-Hellman (DH), Unified Diffie-Hellman (DH2), Menezes-Qu-Vanstone (MQV), LUCDIF, XTR-DH
ECDSA, ECNR, ECIES, ECDH, ECMQV
MD2, MD4, MD5, Panama Hash, DES, ARC4, SEAL 3.0, WAKE, WAKE-OFB, DESX (DES-XEX3), RC2, SAFER, 3-WAY, GOST, SHARK, CAST-128, Square
G. 誰能講解一下布斯演算法
布斯乘法演算法(英語:Booth's multiplication algorithm)是計算機中一種利用數的2的補碼形式來計算乘法的演算法。該演算法由安德魯·唐納德·布斯於 1950 年發明,當時他在倫敦大學柏貝克學院做晶體學研究。布斯曾使用過一種台式計算器,由於用這種計算器來做移位計算比加法快,他發明了該演算法來加快計算速度。布斯演算法在計算機體系結構學科中備受關注。
對於 N 位乘數 Y,布斯演算法檢查其2的補碼形式的最後一位和一個隱含的低位,命名為 y-1 ,初始值為 0 。對於 yi, i = 0, 1, ..., N - 1,考察 yi 和 yi - 1 。當這兩位相同時,存放積的累加器 P 的值保持不變。當 yi = 0 且 yi - 1 = 1 時,被乘數乘以 2i 加到 P 中。當 yi = 1 且 yi - 1 = 0 時,從 P 中減去被乘數乘以 2i 的值。演算法結束後, P 中的數即為乘法結果。
該演算法對被乘數和積這兩個數的表達方式並沒有作規定。一般地,和乘數一樣,可以採用2的補碼方式表達。也可以採用其他計數形式,只要支持加減法就行。這個演算法從乘數的最低位執行到最高位,從 i = 0 開始,接下來和 2i 的乘法被累加器 P 的算術右移所取代。較低位可以被移出,加減法可以只在 P 的前 N 位上進行。