Share to: share facebook share twitter share wa share telegram print page

Treap

Treap
TypeRandomized binary search tree
Time complexity in big O notation
Operation Average Worst case
Search O(log n) O(n)
Insert O(log n) O(n)
Delete O(log n) O(n)
Space complexity
Space O(n) O(n)

In computer science, the treap and the randomized binary search tree are two closely related forms of binary search tree data structures that maintain a dynamic set of ordered keys and allow binary searches among the keys. After any sequence of insertions and deletions of keys, the shape of the tree is a random variable with the same probability distribution as a random binary tree; in particular, with high probability its height is proportional to the logarithm of the number of keys, so that each search, insertion, or deletion operation takes logarithmic time to perform.

Description

A treap with alphabetic key and numeric max heap order

The treap was first described by Raimund Seidel and Cecilia R. Aragon in 1989;[1][2] its name is a portmanteau of tree and heap. It is a Cartesian tree in which each key is given a (randomly chosen) numeric priority. As with any binary search tree, the inorder traversal order of the nodes is the same as the sorted order of the keys. The structure of the tree is determined by the requirement that it be heap-ordered: that is, the priority number for any non-leaf node must be greater than or equal to the priority of its children. Thus, as with Cartesian trees more generally, the root node is the maximum-priority node, and its left and right subtrees are formed in the same manner from the subsequences of the sorted order to the left and right of that node.

An equivalent way of describing the treap is that it could be formed by inserting the nodes highest priority-first into a binary search tree without doing any rebalancing. Therefore, if the priorities are independent random numbers (from a distribution over a large enough space of possible priorities to ensure that two nodes are very unlikely to have the same priority) then the shape of a treap has the same probability distribution as the shape of a random binary search tree, a search tree formed by inserting the nodes without rebalancing in a randomly chosen insertion order. Because random binary search trees are known to have logarithmic height with high probability, the same is true for treaps. This mirrors the binary search tree argument that quicksort runs in expected time. If binary search trees are solutions to the dynamic problem version of sorting, then Treaps correspond specifically to dynamic quicksort where priorities guide pivot choices.

Aragon and Seidel also suggest assigning higher priorities to frequently accessed nodes, for instance by a process that, on each access, chooses a random number and replaces the priority of the node with that number if it is higher than the previous priority. This modification would cause the tree to lose its random shape; instead, frequently accessed nodes would be more likely to be near the root of the tree, causing searches for them to be faster.

Naor and Nissim[3] describe an application in maintaining authorization certificates in public-key cryptosystems.

Operations

Basic operations

Treaps support the following basic operations:

  • To search for a given key value, apply a standard binary search algorithm in a binary search tree, ignoring the priorities.
  • To insert a new key x into the treap, generate a random priority y for x. Binary search for x in the tree, and create a new node at the leaf position where the binary search determines a node for x should exist. Then, as long as x is not the root of the tree and has a larger priority number than its parent z, perform a tree rotation that reverses the parent-child relation between x and z.
  • To delete a node x from the treap, if x is a leaf of the tree, simply remove it. If x has a single child z, remove x from the tree and make z be the child of the parent of x (or make z the root of the tree if x had no parent). Finally, if x has two children, swap its position in the tree with the position of its immediate successor z in the sorted order, resulting in one of the previous cases. In this final case, the swap may violate the heap-ordering property for z, so additional rotations may need to be performed to restore this property.

Building a treap

  • To build a treap we can simply insert n values in the treap where each takes time. Therefore a treap can be built in time from a list values.

Bulk operations

In addition to the single-element insert, delete and lookup operations, several fast "bulk" operations have been defined on treaps: union, intersection and set difference. These rely on two helper operations, split and join.

  • To split a treap into two smaller treaps, those smaller than key x, and those larger than key x, insert x into the treap with maximum priority—larger than the priority of any node in the treap. After this insertion, x will be the root node of the treap, all values less than x will be found in the left subtreap, and all values greater than x will be found in the right subtreap. This costs as much as a single insertion into the treap.
  • Joining two treaps that are the product of a former split, one can safely assume that the greatest value in the first treap is less than the smallest value in the second treap. Create a new node with value x, such that x is larger than this max-value in the first treap and smaller than the min-value in the second treap, assign it the minimum priority, then set its left child to the first heap and its right child to the second heap. Rotate as necessary to fix the heap order. After that, it will be a leaf node, and can easily be deleted. The result is one treap merged from the two original treaps. This is effectively "undoing" a split, and costs the same. More generally, the join operation can work on two treaps and a key with arbitrary priority (i.e., not necessary to be the highest).
Join performed on treaps and . Right child of after the join is defined as a join of its former right child and .

The join algorithm is as follows:

function join(L, k, R)
    if prior(k, k(L)) and prior(k, k(R)) return Node(L, k, R)
    if prior(k(L), k(R)) return Node(left(L), k(L), join(right(L), k, R))
    return Node(join(L, k, left(R)), k(R), right(R))
To split by , recursive split call is done to either left or right child of .

The split algorithm is as follows:

function split(T, k)
    if (T = nil) return (nil, false, nil)
    (L, (m, c), R) = expose(T)
    if (k = m) return (L, true, R)
    if (k < m) 
        (L', b, R') = split(L, k)
        return (L', b, join(R', m, R))
    if (k > m) 
        (L', b, R') = split(R, k)
        return (join(L, m, L'), b, R'))

The union of two treaps t1 and t2, representing sets A and B is a treap t that represents AB. The following recursive algorithm computes the union:

function union(t1, t2):
    if t1 = nil:
        return t2
    if t2 = nil:
        return t1
    if priority(t1) < priority(t2):
        swap t1 and t2
    t<, t> ← split t2 on key(t1)
    return join(union(left(t1), t<), key(t1),
                    union(right(t1), t>))

Here, split is presumed to return two trees: one holding the keys less than its input key, one holding the greater keys. (The algorithm is non-destructive, but an in-place destructive version exists as well.)

The algorithm for intersection is similar, but requires the join helper routine. The complexity of each of union, intersection and difference is O(m log n/m) for treaps of sizes m and n, with mn. Moreover, since the recursive calls to union are independent of each other, they can be executed in parallel.[4]

Split and Union call Join but do not deal with the balancing criteria of treaps directly, such an implementation is usually called the "join-based" implementation.

Note that if hash values of keys are used as priorities and structurally equal nodes are merged already at construction, then each merged node will be a unique representation of a set of keys. Provided that there can only be one simultaneous root node representing a given set of keys, two sets can be tested for equality by pointer comparison, which is constant in time.

This technique can be used to enhance the merge algorithms to perform fast also when the difference between two sets is small. If input sets are equal, the union and intersection functions could break immediately returning one of the input sets as result, while the difference function should return the empty set.

Let d be the size of the symmetric difference. The modified merge algorithms will then also be bounded by O(d log n/d).[5][6]

Randomized binary search tree

The randomized binary search tree, introduced by Martínez and Roura subsequently to the work of Aragon and Seidel on treaps,[7] stores the same nodes with the same random distribution of tree shape, but maintains different information within the nodes of the tree in order to maintain its randomized structure.

Rather than storing random priorities on each node, the randomized binary search tree stores a small integer at each node, the number of its descendants (counting itself as one); these numbers may be maintained during tree rotation operations at only a constant additional amount of time per rotation. When a key x is to be inserted into a tree that already has n nodes, the insertion algorithm chooses with probability 1/(n + 1) to place x as the new root of the tree, and otherwise, it calls the insertion procedure recursively to insert x within the left or right subtree (depending on whether its key is less than or greater than the root). The numbers of descendants are used by the algorithm to calculate the necessary probabilities for the random choices at each step. Placing x at the root of a subtree may be performed either as in the treap by inserting it at a leaf and then rotating it upwards, or by an alternative algorithm described by Martínez and Roura that splits the subtree into two pieces to be used as the left and right children of the new node.

The deletion procedure for a randomized binary search tree uses the same information per node as the insertion procedure, but unlike the insertion procedure, it only needs on average O(1) random decisions to join the two subtrees descending from the left and right children of the deleted node into a single tree. That is because the subtrees to be joined are on average at depth Θ(log n); joining two trees of size n and m needs Θ(log(n+m)) random choices on average. If the left or right subtree of the node to be deleted is empty, the join operation is trivial; otherwise, the left or right child of the deleted node is selected as the new subtree root with probability proportional to its number of descendants, and the join proceeds recursively.

Comparison

The information stored per node in the randomized binary tree is simpler than in a treap (a small integer rather than a high-precision random number), but it makes a greater number of calls to the random number generator (O(log n) calls per insertion or deletion rather than one call per insertion) and the insertion procedure is slightly more complicated due to the need to update the numbers of descendants per node. A minor technical difference is that, in a treap, there is a small probability of a collision (two keys getting the same priority), and in both cases, there will be statistical differences between a true random number generator and the pseudo-random number generator typically used on digital computers. However, in any case, the differences between the theoretical model of perfect random choices used to design the algorithm and the capabilities of actual random number generators are vanishingly small.

Although the treap and the randomized binary search tree both have the same random distribution of tree shapes after each update, the history of modifications to the trees performed by these two data structures over a sequence of insertion and deletion operations may be different. For instance, in a treap, if the three numbers 1, 2, and 3 are inserted in the order 1, 3, 2, and then the number 2 is deleted, the remaining two nodes will have the same parent-child relationship that they did prior to the insertion of the middle number. In a randomized binary search tree, the tree after the deletion is equally likely to be either of the two possible trees on its two nodes, independently of what the tree looked like prior to the insertion of the middle number.

Implicit treap

An implicit treap [8][unreliable source?] is a simple variation of an ordinary treap which can be viewed as a dynamic array that supports the following operations in :

  • Inserting an element in any position
  • Removing an element from any position
  • Finding sum, minimum or maximum element in a given range.
  • Addition, painting in a given range
  • Reversing elements in a given range

The idea behind an implicit treap is to use the array index as a key, but to not store it explicitly. Otherwise, an update (insertion/deletion) would result in changes of the keys in nodes of the tree.

The key value (implicit key) of a node T is the number of nodes less than that node plus one. Note that such nodes can be present not only in its left subtree but also in left subtrees of its ancestors P, if T is in the right subtree of P.

Therefore we can quickly calculate the implicit key of the current node as we perform an operation by accumulating the sum of all nodes as we descend the tree. Note that this sum does not change when we visit the left subtree but it will increase by when we visit the right subtree.

The join algorithm for an implicit treap is as follows:

void join (pitem & t, pitem l, pitem r) {
    if (!l || !r)
        t = l ? l : r;
    else if (l->prior > r->prior)
        join (l->r, l->r, r),  t = l;
    else
        join (r->l, l, r->l),  t = r;
    upd_cnt (t);
}

[8] The split algorithm for an implicit treap is as follows:

void split (pitem t, pitem & l, pitem & r, int key, int add = 0) {
    if (!t)
        return void( l = r = 0 );
    int cur_key = add + cnt(t->l); //implicit key
    if (key <= cur_key)
        split (t->l, l, t->l, key, add),  r = t;
    else
        split (t->r, t->r, r, key, add + 1 + cnt(t->l)),  l = t;
    upd_cnt (t);
}

[8]

Operations

Insert element

To insert an element at position pos we divide the array into two subsections [0...pos-1] and [pos..sz] by calling the split function and we get two trees and . Then we merge with the new node by calling the join function. Finally we call the join function to merge and .

Delete element

We find the element to be deleted and perform a join on its children L and R. We then replace the element to be deleted with the tree that resulted from the join operation.

Find sum, minimum or maximum in a given range

To perform this calculation we will proceed as follows:

  • First we will create an additional field F to store the value of the target function for the range represented by that node. we will create a function that calculates the value F based on the values of the L and R children of the node. We will call this target function at the end of all functions that modify the tree, i.e., split and join.
  • Second we need to process a query for a given range [A..B]: We will call the split function twice and split the treap into which contains , which contains , and which contains . After the query is answered we will call the join function twice to restore the original treap.

Addition/painting in a given range

To perform this operation we will proceed as follows:

  • We will create an extra field D which will contain the added value for the subtree. We will create a function push which will be used to propagate this change from a node to its children. We will call this function at the beginning of all functions which modify the tree, i.e., split and join so that after any changes made to the tree the information will not be lost.

Reverse in a given range

To show that the subtree of a given node needs to be reversed for each node we will create an extra boolean field R and set its value to true. To propagate this change we will swap the children of the node and set R to true for all of them.

See also

References

  1. ^ Aragon, Cecilia R.; Seidel, Raimund (1989), "Randomized Search Trees" (PDF), 30th Annual Symposium on Foundations of Computer Science, Washington, D.C.: IEEE Computer Society Press, pp. 540–545, doi:10.1109/SFCS.1989.63531, ISBN 0-8186-1982-1
  2. ^ Seidel, Raimund; Aragon, Cecilia R. (1996), "Randomized Search Trees", Algorithmica, 16 (4/5): 464–497, doi:10.1007/s004539900061 (inactive 2024-04-18){{citation}}: CS1 maint: DOI inactive as of April 2024 (link)
  3. ^ Naor, M.; Nissim, K. (April 2000), "Certificate revocation and certificate update" (PDF), IEEE Journal on Selected Areas in Communications, 18 (4): 561–570, doi:10.1109/49.839932, S2CID 13833836[permanent dead link].
  4. ^ Blelloch, Guy E.; Reid-Miller, Margaret (1998), "Fast set operations using treaps", Proceedings of the tenth annual ACM symposium on Parallel algorithms and architectures - SPAA '98, New York, NY, USA: ACM, pp. 16–26, doi:10.1145/277651.277660, ISBN 0-89791-989-0, S2CID 7342709.
  5. ^ Liljenzin, Olle (2013). "Confluently Persistent Sets and Maps". arXiv:1301.3388. Bibcode:2013arXiv1301.3388L. {{cite journal}}: Cite journal requires |journal= (help)
  6. ^ Confluent Sets and Maps on GitHub
  7. ^ Martínez, Conrado; Roura, Salvador (1997), "Randomized binary search trees", Journal of the ACM, 45 (2): 288–323, doi:10.1145/274787.274812, S2CID 714621
  8. ^ a b c "Treap - Competitive Programming Algorithms". cp-algorithms.com. Retrieved 2021-11-21.

Read other articles:

قرية الحارثي  - قرية -  تقسيم إداري البلد  اليمن المحافظة محافظة حجة المديرية مديرية أفلح اليمن العزلة عزلة جياح السكان التعداد السكاني 2004 السكان 345   • الذكور 196   • الإناث 149   • عدد الأسر 33   • عدد المساكن 28 معلومات أخرى التوقيت توقيت اليمن (+3 غرينيتش) ت

Italian painter Not to be confused with Michelangelo. Christ and the Woman of Samaria Michelangelo Anselmi (c. 1492 – c. 1554) was an Italian Renaissance-Mannerist painter active mostly in Parma. Biography He was born, apparently in Tuscany, perhaps in Lucca, from a Parmesan family of ancient Langobard origin, known as Anselmi di Cardano. He moved to Siena around 1500, where he is mentioned as painter for the first time in 1511. He was a pupil of Il Sodoma and Domenico Beccafum…

Bisdommen in de Nederlanden voor 1559 Het bisdom Terwaan (Latijn: Dioecesis Morinensis) was in de middeleeuwen een katholiek bisdom in wat nu Noord-Frankrijk en West-Vlaanderen is. De hoofdplaats was de stad Terwaan (Thérouanne) in Artesië. De Latijnse naam was diocesis Tarvennensis seu Morinensis[1]; dit laatste verwijst naar de Romeinse civitas Morinorum, het land van de Morini. Het bisdom Terwaan behoorde tot de kerkprovincie van het aartsbisdom Reims. Het bisdom wordt als een van r…

Regering-Martens VII Ministerverdeling in de regering Martens VII Coalitie ​ CVP/PSC ​ PRL/PVV Zetels Kamer 115 van 212 (13 oktober 1985) Premier Wilfried Martens Aantreden 21 oktober 1987 Einddatum 9 mei 1988 Voorganger Martens VI Opvolger Martens VIII Portaal    België De regering-Martens VII (21 oktober 1987 - 9 mei 1988) was een Belgische regering. Het was een coalitie tussen de CVP/PSC (49 en 20 zetels) en de PRL/PVV (24 en 22 zetels). De regering volgde onmiddellijk …

2017 single by CamelPhat and ElderbrookColaSingle by CamelPhat and Elderbrookfrom the album Dark Matter Released17 June 2017Recorded2017GenreDance[1]house[2]Length 3:44 (radio edit) 4:03 (album edit) 6:56 (club mix) LabelDefectedSongwriter(s) Dave Whelan Mike Di Scala Alexander Kotz Producer(s)CamelPhatCamelPhat singles chronology NYP2 (2017) Cola (2017) Bugged Out (2018) Elderbrook singles chronology Difficult to Love(2017) Cola(2017) Woman(2017) Music videoCola on YouTu…

Дунай в Будапешті Столиця Угорщини Будапешт має вісім автомобільних та два залізничних мости через річку Дунай. Мости Будапешта є важливою частиною транспортної інфраструктури міста та популярними туристичними й визначними пам'ятками. На початку другої половини XIX стол

اضغط هنا للاطلاع على كيفية قراءة التصنيف خيشوميات الذيلالعصر: الفحمي–الآن قك ك أ س د ف بر ث ج ط ب ن Argulus sp. على سمكة أبو شوكة المرتبة التصنيفية طويئفة  التصنيف العلمي المملكة: حيوانات الشعبة: مفصليات الأرجل الشعيبة: قشريات الطائفة: فكيات الأرجل الطويئفة: خيشوميات الذيلThorell, 1…

Artikel ini bukan mengenai Stasiun Cibungur. Stasiun Pasirbungur Stasiun Pasirbungur, 2010LokasiPasirbungur, Purwadadi, Subang, Jawa Barat 41261IndonesiaKetinggian+33 mOperatorKereta Api IndonesiaDaerah Operasi III CirebonLetak dari pangkalkm 109+646 lintas Jakarta–Jatinegara–Cikampek–Cirebon Prujakan–Prupuk–Purwokerto–Kroya[1]Jumlah peronSatu peron sisi dan tiga peron pulau yang sama-sama agak tinggiJumlah jalur4 (jalur 2 dan 3: sepur lurus)Informasi lainKode stasiunPAS0905&…

Ященко Федір Єлисейович Народився 1925(1925)місто Четатя-Албе Королівства Румунія, тепер місто Білгород-Дністровський Одеської областіПомер 1992(1992)місто Миколаїв Миколаївської областіНаціональність росіянинДіяльність державний діячAlma mater Національний університет «Одеськ

American investment banking and brokerage firm G. H. Walker & Co.IndustryBanking, FinanceFounded1900; 123 years ago (1900) in New York City, United StatesFounderGeorge Herbert WalkerDefunct1974 (1974)FateSold to White Weld & Co. G.H. Walker & Co. was an investment banking and brokerage firm founded in 1900 by George Herbert Walker, grandfather and great-grandfather of Presidents George Herbert Walker Bush and George Walker Bush, and located at 1 Wall Street. Ba…

كتيبة الخراب[1] معلومات الكتاب المؤلف عبد الكريم جويطي اللغة العربية الناشر المركز الثقافي العربي تاريخ النشر 2007 النوع الأدبي رواية الموضوع نقد سياسي، النقد الحضاري، نقد أدبي التقديم نوع الطباعة ورقي غلاف عادي عدد الصفحات 222 القياس 14 * 21 المواقع ردمك 978-9953-68-195-5 تعديل مصدر…

Piala EFL 2021–2022Piala Carabao, Piala Liga InggrisStadion Wembley menggelar pertandingan final pada 27 Februari 2022Negara Inggris  WalesTanggal penyelenggaraan31 Juli 2021 – 27 February 2022Jumlah peserta92Juara bertahanManchester CityJuaraLiverpool(gelar ke-9)Tempat keduaChelseaJumlah pertandingan83Jumlah gol234 (2.82 per pertandingan)Pencetak gol terbanyakMarcus ForssEddie Nketiah(masing-masing 5 gol)← 2020–2021 2022–2023 → Piala EFL 2021–2022 adalah musim ke-62 dari…

2023年山梨県知事選挙 2019年 ← 2023年1月22日 (2023-01-22) → 2027年 投票率 52.29%   候補者 長崎幸太郎 志村直毅 倉嶋清次 政党 無所属 無所属 無所属 得票数 215,517 106,783 29,195 得票率 61.33% 30.38% 8.31% 推薦・支持 自由民主党公明党 なし 日本共産党社会民主党れいわ新選組 選挙前知事 長崎幸太郎 無所属 選出知事 長崎幸太郎 無所属 2023年山梨県知事選挙(2023ねんやま

Championnat de France de rugby 1902-1903 Généralités Sport Rugby à XV Organisateur(s) USFSA Éditions 12 Lieu(x) France métropolitaine Nations France Palmarès Vainqueur Stade français Finaliste SOE Toulouse Navigation 1901-1902 1903-1904 modifier L'arrière Saulnier du Stade français vient à l'encontre du ballon dribblé par les joueurs du SOE Toulouse (Prairie des Filtres). Le Stade français en 1903 (4 janvier). Le championnat de France de rugby à XV de première série 1902-1903 est…

Argentina–England football rivalryDiego Maradona celebrating his second goal (considered the best goal in World Cup history) during the 1986 FIFA World Cup.Teams Argentina EnglandFirst meeting9 May 1951 England 2–1 ArgentinaLatest meeting12 November 2005 England 3–2 ArgentinaNext meetingTBDStatisticsMeetings total14Most wins England (6)Top scorer Michael Owen (3 goals)Largest victory England 3–1 Argentina(2 June 1962) England 3–1 Argentina(13 May 1980) Largest goal scori…

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: American Air Mail Society – news · newspapers · books · scholar · JSTOR (December 2019) This article…

Ini adalah nama Korea; marganya adalah Son. WendyWendy di Seoul Hoseo Technical College, Maret 2018.Nama asal손승완[1]LahirSon Seung-wan[2]21 Februari 1994 (umur 29)Seongbuk-gu, Seoul,  Korea Selatan[3]Nama lainWendyPekerjaan Penyanyi Karier musikGenreK-popInstrumenVokalTahun aktif2014–sekarangLabelS.M. EntertainmentArtis terkaitRed VelvetSM Town Nama KoreaHangul손승완 Alih AksaraSon Seung-wanMcCune–ReischauerSon Sŭng-wanNama panggungHangul…

Bridge in Houston, Texas, U.S. United States historic placeMcKee Street BridgeU.S. National Register of Historic Places The bridge in 2010Show map of Houston DowntownShow map of TexasShow map of the United StatesLocationMcKee Street and Buffalo Bayou, Houston, TexasCoordinates29°45′57″N 95°21′7″W / 29.76583°N 95.35194°W / 29.76583; -95.35194Arealess than one acreBuilt1932 (1932)Built byDon Hall Constructors, Inc.ArchitectJoseph Gordon (J. G.) McKenzieArch…

Geography of Antigua and BarbudaRegionCaribbeanCoordinates17°03′N 61°48′W / 17.050°N 61.800°W / 17.050; -61.800AreaRanked 181st • Total442.6 km2 (170.9 sq mi) • Land95.33% • Water4.67%Coastline153 km (95 mi)BordersNo land bordersHighest pointBoggy Peak 402 meters (1,319 ft)Lowest pointAtlantic Ocean 0 metres (0 ft)Longest riverNoneLargest lakePotsworks Reservoir 2.430 ha (6.00 acres)Terrai…

Chinese warlord and politician (1865–1936) In this Chinese name, the family name is Duan. Duan Qirui段祺瑞Duan in 1913Chief Executive of the Republic of ChinaIn office24 November 1924 – 20 April 1926PremierXu ShiyingJia DeyaoPreceded byHuang Fu (acting)Succeeded byHu Weide (acting)Premier of the Republic of ChinaIn office23 March 1918 – 10 October 1918PresidentFeng Guozhang (acting)Preceded byQian NengxunSucceeded byQian NengxunIn office14 July 1917 – 22 Nov…

Kembali kehalaman sebelumnya

Lokasi Pengunjung: 18.117.101.40