演算法解說
① 16×99+16簡便演算法講解
16×99+16
=16×(99+1)
=16×100
=1600
② 五子棋人工智慧演算法講解
五子棋演算法可簡可繁,要看你對自己五子棋程序智能的要求, 人機對戰的意思就是人和電腦下,也就是說電腦會思考如何下棋....其實這才是五子棋程序的核心.如果只實現人與人對戰的話,是一件很簡單的事情,無非就是繪制棋盤,然後繪制下棋的效果,再寫個下棋合法性判斷,勝負判斷....大概就搞定了....所以核心其實是人機對戰的電腦那部分人工智慧.這東西吧,可以研究的很多,不過主要的幾個設計要點就是搜索演算法和估值演算法,這兩個是最主要的,還有提高電腦思考銷率的方法就有多cpu的計算機多線程思考的設計....通過一些手段讓電腦變得更像人類棋手的,例如利用一些遺傳演算法之類的讓電腦具有學習能力,可以在失敗中吸取教訓,開局庫,歷史啟發之類的一大堆......但是總而言之,這一系列演算法的設計沒有一個標准,只要能讓你的電腦下棋下的更聰明,更快那就是好演算法.國內有一個叫王曉春的寫過一本叫<<pc游戲編程( 人機博弈)>>的書,這是一本研究人機博弈程序很經典的書,書的後面還附了一個五子棋的程序實例,你可以參考一下.下面是csdn的下載地址,你也可以自己去搜一下.http://download.csdn.net/source/1925326
③ Warshall演算法的演算法介紹
1、引言
Warshall在1962年提出了一個求關系的傳遞閉包的有效演算法。其具體過程如下,設在n個元素的有限集上關系R的關系矩陣為M:
(1)置新矩陣A=M;
(2)置k=1;
(3)對所有i如果A[i,k]=1,則對j=1..n執行:
A[i,j]←A[i,j]∨A[k,j];
(4)k增1;
(5)如果k≤n,則轉到步驟(3),否則停止。
所得的矩陣A即為關系R的傳遞閉包t(R)的關系矩陣。
在左孝凌等編著的《離散數學》中提到了該演算法,但並未對此演算法作出解釋。下面本文將對該演算法的思想作出一種比較通俗的解說。
2、對Warshall演算法的解說
設關系R的關系圖為G,設圖G的所有頂點為v1,v2,…,vn,則t(R)的關系圖可用該方法得到:若G中任意兩頂點vi和vj之間有一條路徑且沒有vi到vj的弧,則在圖G中增加一條從vi到vj的弧,將這樣改造後的圖記為G』,則G』即為t(R)的關系圖。G』的鄰接矩陣A應滿足:若圖G中存在從vi到vj路徑,即vi與vj連通,則A[i,j]=1,否則A[i,j]=0。
這樣,求t(R)的問題就變為求圖G中每一對頂點間是否連通的問題。
定義一個n階方陣序列A(0),A(1),A(2),…,A(n),每個方陣中的元素值只能取0或1。A(m)[i,j]=1表示存在從vi到vj且中間頂點序號不大於m的路徑(m=1..n),A(m)[i,j]=0表示不存在這樣的路徑。而A(0)[i,j]=1表示存在從vi到vj的弧,A(0)[i,j]=0表示不存在從vi到vj的弧。
這樣,A(n)[i,j]=1表示vi與vj連通,A(n)[i,j]=0表示vi與vj不連通。故A(n)即為t(R)的關系矩陣。
那麼應如何計算方陣序列A(0),A(1),A(2),…,A(n)呢?
很顯然,A(0)=M(M為R的關系矩陣)。
若A(0)[i,1]=1且A(0)[1,j]=1,或A(0)[i,j]=1,當且僅當存在從vi到vj且中間頂點序號不大於1的路徑,此時應將A(1)[i,j]置為1,否則置為0。
一般地,若A(k-1)[i,k]=1且A(k-1)[k,j]=1,或A(k-1)[i,j]=1,當且僅當存在從vi到vj且中間頂點序號不大於k的路徑,此時應將A(k)[i,j]置為1,否則置為0(k=1..n)。用公式表示即為:
A (k)[i,j]=(A(k-1)[i,k]∧A(k-1)[k,j])∨A(k-1)[i,j] i,j,k=1..n
這樣,就可得計算A(k)的方法:先將A(k)賦為A(k-1);再對所有i=1..n,若A(k)[i,k]=1(即A(k-1)[i,k]=1),則對所有j=1..n,執行:
A (k)[i,j]←A(k)[i,j]∨A(k-1)[k,j]
但這與前述Warshall演算法中的第(3)步還有一定距離。若將上式改為:
A(k)[i,j]←A(k)[i,j]∨A(k)[k,j] (即把A(k-1)[k,j]改為A(k)[k,j])
就可將上標k去掉,式子就可進一步變為:
A[i,j]←A[i,j]∨A[k,j]
這樣可以只用存儲一個n階方陣的空間完成計算,且與前述Warshall演算法中第(3)步的式子一致。那麼,可不可以把A(k-1)[k,j]改為A(k)[k,j]呢?答案是肯定的。下面將證明在計算A(k)的過程中A(k-1)[k,j]與A(k)[k,j]相等(A(k)被賦初值A(k-1)後)。考察計算A(k)的方法 只有當i=k時A(k)[k,j]的值才有可能改變,此時將式A(k)[i,j]←A(k)[i,j]∨A(k-1)[k,j]中的i換為k,得A(k)[k,j]←A(k)[k,j]∨A(k-1)[k,j],對某一j,執行該式的賦值操作前A(k)[k,j]=A(k-1)[k,j],因為計算A(k)開始時A(k)被賦為A(k-1),故它們相或的結果等於A(k-1)[k,j],故賦值操作不改變A(k)[k,j]的值。這樣,就沒有操作會改變A(k)[k,j]的值,故A(k-1)[k,j]與A(k)[k,j]相等。
綜上,就可得到計算A(n)的演算法,且該演算法與前述的Warshall演算法完全一致。
由上面的分析,不難看出,Warshall演算法類似於求圖中每對頂點間最短路徑的Floyd演算法。其實,用Floyd演算法也能求關系的傳遞閉包,方法為令關系R的關系圖G中的每條弧的權值都為1,這樣得一有向網G1,設G1的鄰接矩陣為D(-1)(若vi無自迴路,則D(-1)(i,i)=∞),對G1用Floyd演算法求其每對頂點間最短路徑,得結果矩陣D(n-1)。因若G中vi與vj連通,當且僅當D(n-1)[i,j]≠∞,故將矩陣D中的∞都改為0,其它值都改為1,得矩陣A,則矩陣A即為t(R)的關系矩陣。Floyd演算法和Warshall演算法的時間復雜度都為O(n3),但明顯用Floyd演算法求關系的傳遞閉包繞了彎子。
參考文獻:
[1]左孝凌,李為鑒,劉永才,《離散數學》,上海:上海科學技術文獻出版社,1982
[2]嚴蔚敏,吳偉民,《數據結構 C語言版》,北京:清華大學出版社,1997
④ 如何淺顯易懂地解說 Paxos 的演算法
Paxos演算法解決的問題是在一個可能發生消息可能會延遲、丟失、重復的分布式系統中如何就某個值達成一致,保證不論發生以上任何異常,都不會破壞決議的一致性。
一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到一個一致的狀態。為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。
一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。 節點通信存在兩種模型:共享內存和消息傳遞。Paxos演算法就是一種基於消息傳遞模型的一致性演算法。
分析Paxos演算法的目的
Paxos演算法的目的是為了解決分布式環境下一致性的問題。多個節點並發操縱數據,如何保證在讀寫過程中數據的一致性,並且解決方案要能適應分布式環境下的不可靠性(系統如何就一個值達到統一)。
Paxos演算法中,可分為4種角色:
Proposer:提議發起者,處理客戶端請求,將客戶端的請求發送到集群中,以便決定這個值是否可以被批准。
Acceptor:提議批准者,負責處理接收到的提議,他們的回復就是一次投票。會存儲一些狀態來決定是否接收一個值。
Client:產生議題者,Proposer就像Client的使者,由Proposer使者拿著Client的議題去向Acceptor提議,讓Acceptor來決策。
Learner:最終決策學習者,最終學習的目標是Acceptor們最終接受了什麼議題?
只有被提出來的建議才能被大家同意。
最終只能確定一個建議。
如果某個人認為大家同意了某 個建議,那麼這個建議必須真的是被大家同意的。
Paxos演算法的原理
例如:公司商定年會舉辦的地點,每個人都可以提出建議。在現實環境中我們可以在一個會議室共同討論或在微信群中討論(基於內存共享方式);但在基於消息傳遞的分布式環境中每個人只能通過手機簡訊與其它人通過。如何在這種會延遲、丟失的環境中確定一個年會舉辦地點。
Paxos演算法是這樣解決這個問題:
每個人都可以提出建議、同意建議、接受建議
少數服從多數。只要建議被多數人同意即可確定該建議。
於是確定以下討論方式:
Paxos演算法圖解
在實現環境中會通過一次提議,選擇一個Leader。後續所有的提議都只能由Leader提出。
原來paxos演算法里的角色都是這樣的不靠譜,不過沒關系,結果靠譜就可以了。該演算法就是為了追求結果的一致性。
原文鏈接:什麼是Paxos演算法?Paxos演算法是區塊鏈核心演算法之一
⑤ 關於毛利和毛利率的演算法
稅前 毛利=銷售收入-成本 毛利率=毛利除以銷售收入
⑥ 求拓撲排序演算法的詳細講解
3.1AOV網
在現代化管理中,人們常用有向圖來描述和分析一項工程的計劃和實施過程,一個工程常被分為多個小的子工程,這些子工程被稱為活動(Activity),在有向圖中若以頂點表示活動,有向邊表示活動之間的先後關系,這樣的圖簡稱為AOV網。如下圖是計算機專業課程之間的先後關系:
基礎知識課程應先於其它所有課程,pascal語言課程應先於數據結構。
3. 2 拓撲排序
在AOV網中為了更好地完成工程,必須滿足活動之間先後關系,需要將各活動排一個先後次序即為拓撲排序。如上圖的拓撲排序
基礎知識;Pascal;數據結構;離散數學。或
基礎知識;離散數學Pascal;數據結構。
拓撲排序的方法和步驟:
(1)在圖中選一個沒有前趨的頂點並輸出之
(2)刪除該頂點及由它發出的各邊,直到圖中不存在沒有前趨的頂點為止。
若圖中存在迴路,拓撲排序無法進行。
以下是將一AOV網進行拓撲排序的演算法:
網採用鄰接矩陣A表示,若a[i,j]=1,表示活動i先於j,a[i,j]=0,表示活動i與j不存在先後關系。
(1)計算各頂點的入度
(2)找入度為零的點輸出之,刪除該點,且與該點關聯各點的入度減1
(3)若所有頂點都輸出完畢。
程序如下:
program tppv;
const maxn=100;
var
map:array[1..maxn,1..maxn] of byte;
into:array[1..maxn] of byte;
n,i,j,k:byte;
procere init;
var
i,j:integer;
begin
read(n);
for i:=1 to n do
for j:=1 to n do
begin
read(map[i,j]);
inc(into[j]);
end;
end;
begin
init;
for i:=1 to n do
begin
j:=1;
while (j<=n)and(into[j]<>0) do inc(j);
write(j,' ');
into[j]:=255;
for k:=1 to n do
if map[j,k]=1 then dec(into[k]);
end;
end.
3.3應用舉例與練習
例:士兵排隊問題:
有N個士兵(1<=N<=100),編號依次為1,2,...,N.隊列訓練時,指揮官要把士兵從高到矮排成一行,但指揮官只知道「1 比2 高,7 比 5高」這樣的比較結果。
輸入文件:第一行為數N(N〈=100);表示士兵的個數。以下若干行每行兩個數A,B 表示A高於B。
輸出文件:給出一個合法的排隊序列。
程序如下:
program tppv;
const maxn=100;
var
map:array[1..maxn,1..maxn] of byte;
into:array[1..maxn] of byte;
n,i,j,k:byte;
fp:text;
procere init;
var
i,j:integer;
begin
assign(fp,'tp.txt');
reset(fp);
readln(fp,n);
fillchar(map,sizeof(map),0);
fillchar(into,sizeof(into),0);
while not(seekeof(fp)) do
begin
readln(fp,i,j);
map[i,j]=1 ;
inc(into[j]);
end;
close(fp);
end;
begin
init;
for i:=1 to n do
begin
j:=1;
while (j<=n)and(into[j]<>0) do inc(j);
write(j,' ');
into[j]:=255;
for k:=1 to n do
if map[j,k]=1 then dec(into[k]);
end;
end.
練習:
Z語言問題:Z語言的基本字母也是26個,不妨用a到z表示,但先後順序與英語不同。
現在按Z語言的順序給出了N個單詞,請依照這些單詞給出一個可能的Z語言字母順序。
輸入文件:第一行一個數N(N<=100)表示單詞的個數。
第二行到第N+1行,每行一個單詞。
輸出文件:僅一行,可能的字母順序。
(圖不好粘貼)
⑦ 如何淺顯易懂地解說 Paxos 的演算法
Paxos真的並不是很容易理解,而且最初版本的Paxos也不能實現,相對而言一些變種演算法更加容易理解,而且在工程實現上也比較簡單。
其實看論文確實是最有效的,但卻不是最高效的。理解運作過程也好,推導過程也好,大家的回答都是為了幫助大家更高效的掌握這門演算法。大家的回答已經很好, 我這里作為補充,也是算另一個角度,幫助大家去理解paxos的數學推導過程,寫了這么一篇文章:Paxos理論介紹(1): 樸素Paxos演算法理論推導與證明 - 分布式一致性與高可用實踐 - 知乎專欄。希望能幫到大家。
⑧ 動態規劃演算法 通俗的講解一下
這種技術採用自底向上的方式遞推求值,將待求解的問題分解成若干個子問題,先求解子問題,並把子問題的解存儲起來以便以後用來計算所需要求的解。簡言之,動態規劃的基本思想就是把全局的問題化為局部的問題,為了全局最優必須局部最優。多階段決策問題是根據問題本身的特點,將其求解的過程劃分為若干個相互獨立又相互聯系的階段,在每一個階段都需要做出決策,並且在一個階段的決策確定以後再轉移到下一個階段,在每一階段選取其最優決策,從而實現整個過程總體決策最優的目的
⑨ 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