爲什麼說跳錶是隨機算法?

demo:

public static void main(String[] args) {
    ConcurrentSkipListMap<Integer, Integer> concurrentSkipListMap = new ConcurrentSkipListMap<>();
    concurrentSkipListMap.put(1, 1);
    concurrentSkipListMap.put(2, 1);
    concurrentSkipListMap.put(3, 1);
    concurrentSkipListMap.put(4, 1);
    concurrentSkipListMap.put(5, 1);
    concurrentSkipListMap.put(6, 1);
    concurrentSkipListMap.put(7, 1);
    concurrentSkipListMap.put(8, 1);
    concurrentSkipListMap.put(9, 1);
    Integer result = concurrentSkipListMap.get(6);
    System.out.println(result);
}

以上代碼的作用就是在1~9的key值中找到key爲6的value值。

最後是否搜到匹配key以及返回結果的關鍵代碼如下:
在這裏插入圖片描述
這代碼的作用就是判斷搜索的的節點的key值是否和要搜索的key值相等,如果相等,就返回結果,打上了兩個斷點,接下來測試下。

第一次運行搜索次數:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
第一次搜索key爲6的節點,做了6次搜索。

第二次運行搜索次數:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
第二次搜索key爲6的節點,做了3次搜索。

第三次運行搜索次數:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
第三次搜索key爲6的節點,做了5次搜索。

總結

從三次運行結果來看,在搜索key爲6的節點時,搜索的次數是不定的,次數少的自然快,多的就會慢些,所以完全有可能碰到一個糟糕的數據結構影響搜索效率,不過在實際工作中,跳錶的表現還是非常好的,而通過以上的運行結果,也能夠證明跳錶是隨機算法了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章