演算法驗證
㈠ 如題,我寫了演算法,但是就是驗證不出來,麻煩各位大神給個代碼吧,謝了,不要網上的那一段,我看過,不懂
- {BiTreet;inttag;
- ∥tag=0表示結點的左子女已被訪問,
- tag=1表示結點的右子女已被訪問
- }stack;
- stacks[],s1[];∥棧,容量夠大
- BiTreeAncestor(BiTreeROOT,p,q,r)
- ∥求二叉樹上結點p和q的最近的共同祖先結點r。
- {top=0;bt=ROOT;
- while(bt!=null‖top>0)
- {while(bt!=null&&bt!=p&&bt!=q)∥結點入棧
- {s[++top].t=bt;s[top].tag=0;bt=bt->lchild;}
- ∥沿左分支向下
- if(bt==p)
- ∥不失一般性,假定p在q的左側,遇結點p時,
- 棧中元素均為p的祖先結點
- {for(i=1;i<=top;i++)s1[i]=s[i];top1=top;}
- ∥將棧s的元素轉入輔助棧s1保存
- if(bt==q)∥找到q結點。
- for(i=top;i>0;i--)∥;將棧中元素的樹結點到s1去匹配
- {pp=s[i].t;
- for(j=top1;j>0;j--)
- if(s1[j].t==pp){printf
- ("p和q的最近共同的祖先已找到");return(pp);}
- }
- while(top!=0&&s[top].tag==1)top--;∥退棧
- if(top!=0){s[top].tag=1;bt=s[top].t->rchild;}
- ∥沿右分支向下遍歷
- }∥結束while(bt!=null‖top>0)
- return(null);∥q、p無公共祖先
- }∥結束Ancestor
㈡ 數據結構的演算法例子如何上機去驗證
你好,對於數據結構初學者來說,一般都會覺得上機驗證演算法比較困難。因為大家有個共同的誤區,認為書上的演算法直接可以編譯運行。
實際上,數據結構給的演算法例子,很多是偽代碼,是需要修改為實際可執行的代碼才能編譯通過並運行的。如果修改成語法上,邏輯上正確的,可編譯運行的代碼,就要考驗你的編程功底了,而這一點就是初學者體會到的難點。
希望對你有幫助~
㈢ 對稱加密演算法無法驗證發送者和接受者的身份 是什麼意思
我認為加入第三方可以偵聽、插入、修改和中斷兩個合法實體的通信,光有認證不能確保安全必須實施通信加密,所述的認證包含各種網路認證技術。
發端和收端能夠相互驗證身份的前提是雙方都存儲有對方信息,採用可信方式將信息傳遞給對方來鑒別/證明身份。
支持驗證身份的演算法有很多,但演算法並不能驗證身份,演算法只是一種支持建立可信通道的手段。證明身份只能是信息,如:用戶名密碼,數字證書。有了這些數據並通過對稱演算法或非對成演算法甚至散列函數建立可信信道傳輸證明己方身份的數據向對方提供身份證明。
1 通過散列函數驗證身份的解決方案: MD5 challenge;
2 通過對稱演算法驗證身份的解決方案: 沒有標準的solution但完全可以實現;
3 通過非對稱演算法驗證身份的解決方案: PKI;
由於非對稱演算法可以保證通信各方的信息為私有,所以它作為最為廣泛的認證技術,而MD5 Challenge的認證技術由於實現簡單也被廣泛部署:在路由協議CHAP,Radious認證等場合可以見到,至於對稱演算法的認證,它與MD5 Challenge相比沒有優勢,因而很少採用但是並不意味著不能實現此功能。
㈣ 如何上機驗證演算法的時間復雜度呢
示例代碼如下:
clock_t t1,t2;
t1 = clock();
// 主程序代碼
t2 = clock();
clock_t t = t2 - t1;
注意 clock_t 變數的單位是毫秒。所以結果是程序運行了多少毫秒。
這樣你可以觀察到不同演算法的實現程序的運行時間的差異。
你還可以用另一種做法,就是找出程序中執行頻度最高的語句,然後用一個統計變數計算該語句被執行了多少次。
㈤ CRC校驗的演算法
在代數編碼理論中,將一個碼組表示為一個多項式,碼組中各碼元當作多項式的系數。例如 1100101 表示為1·x6+1·x5+0·x4+0·x3+1·x2+0·x+1,即 x6+x5+x2+1。
設編碼前的原始信息多項式為P(x),P(x)的最高冪次加1等於k;生成多項式為G(x),G(x)的最高冪次等於r;CRC多項式為R(x);編碼後的帶CRC的信息多項式為T(x)。
發送方編碼方法:將P(x)乘以xr(即對應的二進制碼序列左移r位),再除以G(x),所得余式即為R(x)。用公式表示為T(x)=xrP(x)+R(x)
接收方解碼方法:將T(x)除以G(x),得到一個數,如果這個余數為0,則說明傳輸中無錯誤發生,否則說明傳輸有誤。
舉例來說,設信息編碼為1100,生成多項式為1011,即P(x)=x3+x2,G(x)=x3+x+1,計算CRC的過程為
xrP(x) =x3(x3+x2) = x6+x5 G(x)= x3+x+1 即 R(x)=x。注意到G(x)最高冪次r=3,得出CRC為010。
如果用豎式除法(計算機的模二,計算過程為
1110 ------- 1011 /1100000 (1100左移3位) 1011 ---- 1110 1011 ----- 1010 1011 ----- 0010 0000 ---- 010 因此,T(x)=(x6+x5)+(x)=x6+x5+x, 即 1100000+010=1100010
如果傳輸無誤,
T(x)= (x6+x5+x)/G(x) = , G(x)= 無余式。回頭看一下上面的豎式除法,如果被除數是1100010,顯然在商第三個1時,就能除盡。
上述推算過程,有助於我們理解CRC的概念。但直接編程來實現上面的演算法,不僅繁瑣,效率也不高。實際上在工程中不會直接這樣去計算和驗證CRC。
下表中列出了一些見於標準的CRC資料:
名稱 生成多項式 簡記式* 應用舉例
CRC-4 x4+x+1 3 ITU G.704
CRC-8 x8+x5+x4+1 31 DS18B20
CRC-12 x12+x11+x3+x2+x+1 80F
CRC-16 x16+x15+x2+1 8005 IBM SDLC
CRC-ITU** x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS,ZigBee
CRC-32 x32+x26+x23+...+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI,IEEE 1394,PPP-FCS
CRC-32c x32+x28+x27+...+x8+x6+1 1EDC6F41 SCTP
* 生成多項式的最高冪次項系數是固定的1,故在簡記式中,將最高的1統一去掉了,如04C11DB7實際上是104C11DB7。 ** 前稱CRC-CCITT。ITU的前身是CCITT。
備註:
(1)生成多項式是標准規定的
(2)CRC校驗碼是基於將位串看作是系數為0或1的多項式,一個k位的數據流可以看作是關於x的從k-1階到0階的k-1次多項式的系數序列。採用此編碼,發送方和接收方必須事先商定一個生成多項式G(x),其高位和低位必須是1。要計算m位的幀M(x)的校驗和,基本思想是將校驗和加在幀的末尾,使這個帶校驗和的幀的多項式能被G(x)除盡。當接收方收到加有校驗和的幀時,用G(x)去除它,如果有餘數,則CRC校驗錯誤,只有沒有餘數的校驗才是正確的。
㈥ 如何驗證 排序演算法
輸入數據,
輸出排好序的序列。
軟體測試可以設計測試用例,用自動化的方法驗證。
㈦ 演算法的正確性如何檢驗
我這學期也正在學數據結構,學的那個暈那,寫的只是代碼而已,也就是說是編程的思路。如果你要證明,那就得用具體的程序帶入吧。我師傅說,數據結構是編程的重心,最重要了。所以好好學吧。
㈧ 國密演算法怎麼實現驗證 用什麼軟體
國密演算法是國家密碼局制定標準的一系列演算法。其中包括了對稱加密演算法,橢圓曲線非對稱加密演算法,雜湊演算法。具體包括SM1,SM2,SM3等,其中:
SM2為國家密碼管理局公布的公鑰演算法,其加密強度為256位。其它幾個重要的商用密碼演算法包括:
SM1,對稱加密演算法,加密強度為128位,採用硬體實現;
SM3,密碼雜湊演算法,雜湊值長度為32位元組,和SM2演算法同期公布,參見《國家密碼管理局公告(第 22 號)》;
SMS4,對稱加密演算法,隨WAPI標准一起公布,可使用軟體實現,加密強度為128位。
㈨ 怎麼驗證sift演算法對亮度的不變性
2、高斯模糊
SIFT演算法是在不同的尺度空間上查找關鍵點,而尺度空間的獲取需要使用高斯模糊來實現,Lindeberg等人已證明高斯卷積核是實現尺度變換的唯一變換核,並且是唯一的線性核。本節先介紹高斯模糊演算法。
2.1二維高斯函數
高斯模糊是一種圖像濾波器,它使用正態分布(高斯函數)計算模糊模板,並使用該模板與原圖像做卷積運算,達到模糊圖像的目的。
N維空間正態分布方程為:
(1-1)
其中,是正態分布的標准差,值越大,圖像越模糊(平滑)。r為模糊半徑,模糊半徑是指模板元素到模板中心的距離。如二維模板大小為m*n,則模板上的元素(x,y)對應的高斯計算公式為:
(1-2)
在二維空間中,這個公式生成的曲面的等高線是從中心開始呈正態分布的同心圓,如圖2.1所示。分布不為零的像素組成的卷積矩陣與原始圖像做變換。每個像素的值都是周圍相鄰像素值的加權平均。原始像素的值有最大的高斯分布值,所以有最大的權重,相鄰像素隨著距離原始像素越來越遠,其權重也越來越小。這樣進行模糊處理比其它的均衡模糊濾波器更高地保留了邊緣效果。
㈩ 關於MD5加密演算法密碼驗證問題
(恰恰我最近也在研究加密這塊,
我們公司項目的RSA ASE MD5 SHA-1加密方案都是我寫的。
直接拿我分享會上的稿子了)
先回答你的問題:
你的擔心是正確的,
MD5加密的結果值A,是可以由兩個不同的內容B和C得到的
即:期望的正確密碼 a a進行MD5加密的結果
某人輸入了錯誤的密碼x,
x進行特殊的演算法處理,是可以得到 這個MD5值的
————
但是你注意一點,錯誤的密碼數據,必須是通過復雜演算法得到,簡單點稱作「碰撞演算法」。碰撞演算法,其實可以看作是一種偽裝演算法,即,把錯誤的東西偽裝成某個正確東西的MD5值。
至於「碰撞演算法」的原理,可以從MD5加密的原理探知1、2,
MD5加密的過程有四步驟:
填充 2.初始化變數3. 處理分組數據 4.輸出結果
「碰撞演算法」原理就是在前三步進行「大數據量樣本的填充-試錯-填充試錯-直至得到期望的結果
破解過程中有三點是必須清晰的;
1.大量的正確密碼的樣本
2.採用碰撞演算法
3.事先預知的,破解者期望的正確的結果
三者缺一不可
MD5「碰撞演算法」的示例場景也是在 文件(比如數字簽名)摘要加密上,
即,像密碼學家演示的那樣:
通過演算法,可以得到相同MD5值的A和B (A和B只是代指),這種演算法2004年已經由中國的密碼學家王小雲實現。
但是回到題主擔心的,
非法分子,事先並不知道 張無忌的賬號——正確密碼對應的MD5值,
他只能用「碰撞演算法」去試,隨便編一個假的密碼,用「碰撞演算法」去進行偽裝填充-試錯
但是試的過程就是無數次跟貴公司後台校驗的過程,
在這個過程,貴公司後台應該做了用戶當日最大錯誤密碼次數處理。
所以理論上,不存在一個人,輸入了錯誤的密碼,登錄成功的情況。
假設這個人每天能試5次,使用「碰撞演算法」估計要算好幾輩子了。
——
但是強調一下「MD5碰撞演算法」的應用前提:
已知的明文以及明文對應的MD5值
根據1的條件,演算法可以偽裝出 另一個明文以及相同的MD5值
所以,不存在偶爾輸錯了一個密碼,使用MD5加密,湊巧得到了正確密碼的MD5值,這種情況不滿足「碰撞演算法」的條件和前提。
根本不可能。
安全性總結:
對於文件來說碰撞可能容易,但是對於限定長度的密碼或者密文來說,MD5作為一種高性能高安全的數字簽名演算法來說,還是非常實用的
——
綜上 MD5碰撞幾個關注點
多數情況下,會產生不可視字元,而密碼不可能存在不可視字元的.
生成"碰撞"的字元,能和你密碼本身長度相等的.基本不可能.
基於上面兩點.只要稍作點文章.就可以防止MD5碰撞了.
1.密碼進行多次MD5加密
2.密碼過濾不過視字元.
3.密碼是定長的.例如:32個字元.用戶不夠的字元,用一固定字元如:空格補充.超長的.一律非法.
————
參考文章
【1】中國密碼學家王小雲2004年提交的破解MD5的演算法
【2】碰撞演算法原理分析
【3】產生MD5碰撞的新的充分條件集
【4】MD5碰撞