C STL 為什麼沒有替換堆頂元素然後調整堆的函式?

時間 2021-05-11 20:36:25

1樓:

請選擇#include

__gnu_pbds

::priority_queue

pairing_heap_tag

>或者__gnu_pbds

::priority_queue

thin_heap_tag

>二者支援任意位置的元素修改,前者為均攤 ,後者為 ,在只有increase_key操作的情況下, 後者為均攤 ,只有在這種情況下漸進複雜度會優於pop再push。如果只修改堆頂的話,用這個有點大材小用,而且常數估計比那種陣列原地建堆的高不少,所以實際執行時間也不見得更優,但是總算是滿足題主你的需求吧。

另一方面,嚴格來講這個可能不算STL的一部分,至少cppreference上是找不到的,大概算是GCC的專屬福利。

This file is part of the GNU ISO C++ Library.

2樓:

update:我搞錯問題的意思了,如果替換以後用make_heap,這個函式複雜度是O(n);如果自己實現了這個操作,那只要調整堆頂即可,是O(logn)

你可以比較一下兩種操作:

替換堆頂需要O(1),再調整堆需要O(n)。

pop_heap需要O(logn),插入乙個元素需要O(1),再push_heap需要O(logn)。

看起來還是後者更快……

而且我覺得stl應該只提供「必要」的那部分操作,剩下的需求你可以自己組合得到,這點和fp中乙個函式只幹一件小事,但是許多函式組合起來就能幹一件大事還是蠻像的……

為什麼空集沒有乙個元素,卻是任何集合的子集?

子集怎麼定義的?則稱 這個邏輯符號很有意思,它是這樣定義的 定義為 通俗來講,前提不成立可以推出任意結論。比如 如果明天太陽從西邊出來,那麼我就是世界首富 這句話是符合邏輯的。回到子集的定義,由於 不成立,所以對於任意集合 是成立的,即空集是任意集合的子集。 Chen George 這個命題在 Wh...

為什麼太空中有氣體元素卻沒有任何氣體 ?

robin 有的,比如氫氣就是常見的星際物質。氣體是物質的相的概念,具體處於什麼相我們需要通過相圖來看。以上是乙個氫氣的相圖 1 根據環境的壓強和溫度,我們可以找到物質對應的狀態。雖然太空溫度很低,但是壓強也同樣趨近於0,所以大部分物質是以氣相形式存在的。1 Leung,W.B.N.H.March,...

為什麼沒有專家懷疑三星堆文物就是商朝的?

蜀中自有美景 三星堆是有文獻記載的,按照 山海經 記載三星堆時期的疆域是西到黑水 古金沙江南流入印度洋 東到北韓。這次出土的東北岫岩玉和印度洋海貝可以解釋。而大邑商只是乙個大邑,在 山海經 中都不值一提的乙個類似諸侯國的屬地。這些年考古界把周邊文化往商文化上靠,造成商很強大的假象。大家知道 武丁興商...