關於非旋FHQ Treap的複雜度證明

2022-02-23 18:45:48 字數 784 閱讀 8011

a,b都是sort之後的排列(從小到大)

由乙個排列a構造一顆bst,由於我們只確定了中序遍歷=a,但這顯然是不能確定一棵樹的形態的。

由乙個排列b構造一顆heap(大根),由於沒有重複元素,然後人為欽定左兒子《右兒子,那麼他的後序遍歷=b。

但是一棵樹,如果中序遍歷和後續遍歷確定了,那麼他的形態也就確定了。證明考慮構造一種由中序和後序遍歷的序列還原一顆確定的樹的演算法。

考慮這棵樹的深度是多少,不難發現上述演算法遞迴多少層那麼樹的深度就是多少。

由於中序遍歷a是出題人隨意構造的。所以我們只能改變後序遍歷。

後序遍歷是乙個排列b,排列中每個數有乙個對應在中序遍歷的位置pos[i],其中a[pos[i]]=b[i],我們random_shuffle(b)就相當於random_shuffle(pos)。

現在有乙個隨機排列pos,考慮我們的演算法就變成了 : 選擇最後的那個位置上的值pos[n], 然後把排列中\(和\(>pos[n]\)的弄出去繼續遞迴。

由於我們是random_shuffle(pos)的,相當於pos[n]的值是我們隨機出來的,所以這個問題等價於快速排序演算法。

而快排演算法遞迴深度是\(o(\log n)\) 的。回到原問題我們就證明fhq treap的深度是期望\(o(\log n)\)的。

而關於這個演算法在各種特定構造資料下的表現,顯然和快排演算法的表現是等價的。

是不是感覺fhq treap突然一下子沒有那麼玄乎了?

關於複雜的cell模型

關於複雜的cell模型 第乙個寫資料模型,第二個,先來frame,先把frame弄好,再來乙個cell,因為資料模型完了之後是存到frame模型的,存的過程中,根據資料模型裡面的內容來計算子控制項的寬高,現在還沒有子控制項,等cell定義完了之後才有子控制項 資料模型是放在frame模型裡面的,放的...

關於name的注射非value

轉lake2 說到url編碼,你或許會想起n年前的url編碼漏洞。可惜我是 生不逢時 啊,我接觸網路時,那個漏洞早就絕跡咯。言歸正傳,url 編碼是什麼東東呢?看看我從網上抄的定義 引用 url編碼是一種瀏覽器用來打包表單輸入的格式。瀏覽器從表單中獲取所有的name和其中的值 將它們以name va...

關於非旋轉treap的學習

非旋轉treap的操作基於split和merge操作,其餘操作和普通平衡樹一樣,複雜度保證方式與旋轉treap差不多,都是基於乙個隨機的引數,這樣構出的樹樹高為 logn 作用 將原平衡樹分為排名為 1,k k 1,n 的兩棵平衡樹 實現 1.如果 x 左兒子的子樹大小 size l k 那麼 x ...