更新時間:2021-02-02 17:18:33 來源:動力節(jié)點 瀏覽1441次
隨機測試是根據(jù)測試說明書執(zhí)行用例測試的重要補充手段,是保證測試覆蓋完整性的有效方式和過程。紅黑樹是一種特定類型的二叉樹,對紅黑樹這一數(shù)據(jù)結(jié)構(gòu)準(zhǔn)確性的測試主要考察以下操作:插入,刪除,查詢,遍歷和驗證。本文我們就通過較為直觀的例子來簡單分析一下紅黑樹隨機測試。
紅黑樹的插入和刪除操作由inset和remove實現(xiàn),查詢操作在插入和刪除操作時會間接調(diào)用,由find實現(xiàn),遍歷操作分為正序(由minimum和next實現(xiàn))和逆序遍歷(由maximim和prev實現(xiàn)),驗證操作主要是驗證插入和刪除后紅黑樹的合法性,由validate實現(xiàn)。至于其他和紅黑樹統(tǒng)計特性相關(guān)的操作,比如獲取樹高、節(jié)點數(shù)和累計的旋轉(zhuǎn)次數(shù)等可以很容易實現(xiàn)。
我們使用隨機數(shù)產(chǎn)生器隨機產(chǎn)生一批數(shù)據(jù)插入到紅黑樹內(nèi),然后再隨機產(chǎn)生一批數(shù)據(jù)作為刪除操作的參數(shù)。其中每次插入和刪除時都會對樹的合法性進(jìn)行驗證,并且在插入后刪除數(shù)據(jù)結(jié)束后以正序和逆序的方式輸出紅黑樹的節(jié)點以及其他統(tǒng)計信息。測試代碼如下:
#include"rb_tree.h"
#include
#include
int main()
{
????srand((unsigned)GetCurrentTime());
????int times=10,len=30;
????while(times--)
????{
????????rb_tree tree;
????????for(int i=0;i::node_type*node=tree.minimum();node;node=tree.next(node))
????????{
????????????cout<value<<" ";
????????}
????????cout<<"\n旋轉(zhuǎn)次數(shù)-黑高-節(jié)點數(shù):"<::node_type*node=tree.maximum();node;node=tree.prev(node))
????????{
????????????cout<value<<" ";
????????}
????????cout<<"\n旋轉(zhuǎn)次數(shù)-黑高-節(jié)點數(shù):"<
經(jīng)過大量的循環(huán)隨機測試,可以驗證紅黑樹數(shù)據(jù)結(jié)構(gòu)的穩(wěn)定性以及平衡性調(diào)整算法的正確性,下邊是測試結(jié)果的部分截圖。
綜上所述,我們在對紅黑樹數(shù)據(jù)結(jié)構(gòu)有了充分地了解,尤其是掌握學(xué)習(xí)了復(fù)雜的紅黑樹的插入刪除平衡性調(diào)整算法之后,最后進(jìn)行的隨機測紅黑樹的核心算法的正確性。通過對紅黑樹數(shù)據(jù)結(jié)構(gòu)的詳盡剖析,能夠讓我們對數(shù)據(jù)結(jié)構(gòu)在計算機學(xué)科的重要性有了更充分地認(rèn)識,在本站的數(shù)據(jù)結(jié)構(gòu)和算法教程中還有大量的精彩紛呈的數(shù)據(jù)結(jié)構(gòu)的知識,快來學(xué)習(xí)吧!