哇!協議和演算法竟然不是一回事!千萬別再說錯了!

2021-10-11 11:04:14 字數 1769 閱讀 7255

今天距考研還有19天23時58分51秒!還沒複習完的你不要慌。我又來送乾貨了!本部落格適合學習速成的人。如果你喜歡和時間賽跑,那就關注、點讚吧,我們都是有共同愛好的人。

看到這個標題,有沒有很驚訝!

哈哈哈,接下來就聽我慢慢解釋吧。

協議是掌管乙個系統如何執行的一系列規則。這些規則確立了不同部分的基本功能、他們如何相互作用、以及對於良好執行所必需的條件。協議的不同部分對時間順序不敏感——首先制定哪個部分並不重要。協議也不會告訴系統該如何產生乙個結果或輸出,除了順利執行之外,沒有其他目標。

協議就像一輛汽車的引擎。

演算法,是一組產生輸出結果的指令。它可以是一段簡單的指令碼,也可以是乙個複雜的程式。指令的順序非常重要,而演算法指定了該順序。它會告訴系統該做什麼才能達到預期結果。它可能不會提前知道結果是什麼,但它知道它需要乙個結果。

演算法就像一輛汽車的駕駛員,它發布的指令就是駕駛員為操作汽車而做的一系列行為。

上面這張圖中,橋是協議,自行車是協議,騎車的人是演算法。

協議是一組決定系統功能的規則,演算法是一組告訴系統該做什麼的指令。協議定義的是「是(is)」,演算法是「做(dose)」

協議就是一系列的條件和指令

演算法則是這樣的:

切洋蔥在平底鍋裡加熱橄欖油

把洋蔥放到鍋裡,加一些鹽,翻炒洋蔥至半透明狀

區塊鏈既需要協議又需要演算法,並且每個都有不一樣的作用。

在區塊鏈世界裡,協議的作用如下:

告訴節點如何在彼此間進行互動

確定資料從乙個節點到下乙個節點的路線

定義區塊是什麼樣的

規定誰決定哪些交易是有效的

明確如何確定共識

規定誰維護賬本

確立決定系統規則如何變化的代表

決定是否需要身份

決定誰能創造新的幣

在發生錯誤時觸發程式

演算法在區塊鏈裡扮演的角色又是什麼呢?

驗證簽名

確認餘額

決定區塊是否是有效的

確定礦工如何驗證區塊

建立告訴區塊移動的程式

建立創造新幣的程式

告訴系統如何確定共識

現在你已經分清協議和演算法了對吧。那麼問題來了,「工作量證明」和「權益證明」是協議還是演算法呢?在很多**報道中,既有把它們稱為「演算法」的,也有把它們描述為「協議」的。

而我認為它們是演算法,而不是協議。

無論是工作量證明還是權益證明,它們都是告訴礦工該如何驗證區塊。它們像協議一樣建立條件,但指令才是基礎,並且有乙個很明確的輸出結果:處理交易,確認哪些區塊寫入鏈上,就哪個鏈是正確的鏈達成共識。兩者都是用底層協議來實現這些目標。

沿著這個思路走,位元幣和以太坊是演算法還是協議?

它們是協議而不是演算法。

它們建立基本規則,設定「引擎」並確定誰做什麼以及如何做。然後,使用者利用演算法來轉幣,執行智慧型合約並建立新的商業模式。演算法是使協議發揮作用的根本原因。

這就是為什麼區別很重要。我們需要理解狀態和行為間的不同、規則和程式間的不同、能做和不能做之間的區別。我們不能改變規則(如果你想改變的話,回到原點,重新建乙個新的區塊鏈),但是我們能建立一些列的行為、指令和程式,以幫助我們得到預期的結果。

記憶體洩漏是怎麼一回事

一般我們常說的記憶體洩漏是指堆記憶體的洩漏。堆記憶體是指程式從堆中分配的,大小任意的 記憶體塊的大小可以在程式執行期決定 使用完後必須顯示釋放的記憶體。應用程式一般使用malloc,realloc,new等函式從堆中分配到一塊記憶體,使用完後,程式必須負責相應的呼叫free或delete釋放該記憶體...

C 模版是怎麼一回事

學習c 一直對這塊不是很了解,今天有時間搞搞,模版的概念是在c 語言的高版本才引進的,模版是引數化的型別,在有模版之前 c 語言的程式設計師熱衷於設計類屬一類 其目標是為了實現程式 的可重用性,通過屬性程式設計,使得同一結構 的不同例項公用同樣的 這樣的類屬性資料結構包括 桟 佇列,陣列 矩陣 鍊錶...

對換和迴圈移位是一回事

本文只是個人一點拙見,高手請忽略此文。今天在看 程式設計之美 裡面有道很經典的題目 陣列迴圈移位。之所以說它經典,是因為它多次出現各大it公司的筆試 面試題上,而且這道題還曾經入選計算機考研的演算法題。相信很多人都知道解法了,而且不只一種解法。書上也給出了三種解法,分別用了移位 考慮周全的移位和對換...