国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一種比線段樹還高效的區間算法

算法與數據結構 ? 來源:小K算法 ? 作者:小K算法 ? 2022-04-11 09:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01 故事起源

有N個數排列成一排,給定一個區間,如何快速找出區間內最大的數是多少呢?

34f9dfbe-b7a6-11ec-aa7f-dac502259ad0.jpg

02 分析

首先想到的自然是從區間頭開始,依次遍歷完區間內的元素,這樣就可以找出結果了。但這個復雜度是O(n),肯定不是我們想要的。

350a9016-b7a6-11ec-aa7f-dac502259ad0.jpg

再來分析一下有什么特點呢?

這些數不會更改,所以每個區間的結果是不會變的,是否可以把所有的區間結果先計算出來?

3524ef60-b7a6-11ec-aa7f-dac502259ad0.jpg

如果數據規模很小確實可以,一旦數據過大肯定就不行了,因為時間和空間都是O(n^2)。

353e0d1a-b7a6-11ec-aa7f-dac502259ad0.jpg

再考慮一下,區間的最值是有很強的傳遞關系,這就引導我們可以把大問題化為小問題。

355903ea-b7a6-11ec-aa7f-dac502259ad0.jpg

很顯然,這就是一個標準的線段樹模型,不過今天我們再換一個更加高效的算法,稀疏表。 03 稀疏表稀疏表的思想就是提前預處理數據,所以主要針對數據不變的情況,而線段樹更加靈活,可以動態維護數據的變化。

首先還是將區間劃分成很多的小區間。那如何劃分更合理?

第2章節中,我們枚舉了所有的區間情況,可以看出其實有很多重復的情況,比如下面[0,3]其實可以通過[0,1]和[2,3]組合出來。

356cb1c4-b7a6-11ec-aa7f-dac502259ad0.jpg

可以根據長度劃分區間。

設數組為a[i],f[i][j]表示區間[i,j]的最大值。

則長度為1的區間總共有n個,f[i][i]=a[i]。

3584108a-b7a6-11ec-aa7f-dac502259ad0.jpg

長度為2的區間總共有n-1個。

358f1458-b7a6-11ec-aa7f-dac502259ad0.jpg

因為之前已經求出了長度為1的區間的最大值,所以區間長度為2的最大值可以通過區間長度為1的結果直接推出來。

359f34aa-b7a6-11ec-aa7f-dac502259ad0.jpg

接下來就考慮長度為3的區間了嗎?

其實并不是,因為前面已經有了長度為1和2的,所以可以組合出長度為3和4的。

35ae665a-b7a6-11ec-aa7f-dac502259ad0.jpg

那就直接考慮長度為5的嗎?

如果考慮為5的,那你怎么計算呢,前面的也推不出長度為5的結果啊,至少得有3個區間才能推出來

35c94380-b7a6-11ec-aa7f-dac502259ad0.jpg

所以接下來考慮長度為4的區間才是正解,總共有n-3個。

35dd169e-b7a6-11ec-aa7f-dac502259ad0.jpg

再接下來自然就是考慮長度為8的區間了,總共有n-7個。

但這里有個很明顯的問題,就是我們的數組f[i,j]定義的不合理,因為里面很多的小區間沒有用上,比如長度為3,5,6,7等,所以需要重新定義。 04 狀態壓縮可以將第二維用于表示區間長度,第一維表示區間起點,對第二維就可以進行狀態壓縮。

設f[i,j]表示從i開始,長度為2^j的區間的最大值,即區間[i,i+2^j-1]。

35f43f5e-b7a6-11ec-aa7f-dac502259ad0.jpg

則長度為2^j的區間就可以通過左右2個長度為2^(j-1)的區間推出結果。時間和空間的復雜度都為O(nlogn)。

3609f2ea-b7a6-11ec-aa7f-dac502259ad0.jpg

05 區間分解

那查詢結果的時候要怎么處理呢,我們只計算了長度為2^j的區間,并沒有計算長度為3、5、7等區間的結果。

所以這個處理和線段樹的思想也類似,需要進行區間分解。不過線段樹可能分解成很多個區間,而稀疏表只需要分解成2個區間就可以了。

對于任意區間[a,b],長度為b-a+1,總可以找到2個長度為2^j的區間,這2個區間組合起來可以完全覆蓋[a,b],其中j的值為log(b-a+1)。

左邊的區間左端點從a開始,長度為2^j,即區間[a,a+2^j-1]。右邊的區間右端點從b開始,長度為2^j,即區間[b-2^j+1,b]。

則區間[a,b]的最大值就是這兩個區間中更大的那個,即max(f[a,j],f[b-2^j+1,j])。

36223a6c-b7a6-11ec-aa7f-dac502259ad0.jpg

06 代碼實現

代碼實現了最大值和最小值的獲取。

6.1變量定義

int high[50000][17], low[50000][17], n, q;

6.1預處理

void solve() {

// 枚舉區間長度,2^j《=n

for (int j = 1; (1 《《 j) 《= n; ++j) {

// 枚舉左端點i,右端點i+2^j-1《=n-1

for (int i = 0; i + (1 《《 j) 《= n; ++i) {

high[i][j] = max(high[i][j - 1], high[i + (1 《《 (j - 1))][j - 1]);

low[i][j] = min(low[i][j - 1], low[i + (1 《《 (j - 1))][j - 1]);

}

} }

6.1main函數

int main() {

cin 》》 n 》》 q;

for (int i = 0; i 《 n; ++i) {

cin 》》 high[i][0];

low[i][0] = high[i][0];

}

solve();

for (int i = 0; i 《 q; ++i) {

int a, b;

cin 》》 a 》》 b;

a--;

b--;

int j = (int) (log(b - a + 1.0) / log(2.0));

int minHeight = min(low[a][j], low[b - (1 《《 j) + 1][j]);

int maxHeight = max(high[a][j], high[b - (1 《《 j) + 1][j]);

cout 《《 maxHeight - minHeight 《《 endl;

}

return 0; }

07 總結

對于數據不變的情況,可以用稀疏表預處理,這種屬于離線算法。如果要動態維護變化,動態查詢,那就得用在線算法,比如線段樹。但稀疏表的效率確實高,有狀態壓縮和動態規劃的思想,值得深入研究學習。

--- EOF ---

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4784

    瀏覽量

    98060
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67511

原文標題:一種比線段樹還高效的區間算法

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    安森美工業圖像傳感器電源的作用和特性要求

    為圖像傳感器系統選擇合適的電源管理元器件時, 需借助一種稱為電源( power tree) 的架構設計工具。 通過仔細研讀各器件規格書,并按正確順序推導公式, 可確保為電源選配恰當的穩壓器件。
    的頭像 發表于 02-27 15:08 ?323次閱讀
    安森美工業圖像傳感器電源<b class='flag-5'>樹</b>的作用和特性要求

    Bamtone ICT系列:一種新型高效的離子污染測試儀?

    設計的款精密離子污染檢測儀器,被定位為一種新型高效的離子污染測試儀,代表了當前PCBA離子污染檢測向自動化、智能化和高效化發展的趨勢,是國產替代高端進口設備的
    的頭像 發表于 01-12 11:28 ?416次閱讀
    Bamtone ICT系列:<b class='flag-5'>一種</b>新型<b class='flag-5'>高效</b>的離子污染測試儀?

    8常用的CRC算法分享

    CRC 計算單元可按所選擇的算法和參數配置來生成數據流的 CRC 碼。有些應用中,可利用 CRC 技術來驗證數據的傳輸和存儲的完整性。 8 常用的 CRC 算法,包括: CRC16_IBM
    發表于 11-13 07:25

    復雜的軟件算法硬件IP核的實現

    源代碼編譯為 HDL 的過程共分為兩步: (1)C to HASM (2)HASM to HDL 第步 C to HASM 是將 C 語言描述的算法編譯為一種中間的、與實際硬
    發表于 10-30 07:02

    SM4算法原理及分享1

    SM4算法一種分組密碼算法。其分組長度為128bit,密鑰長度也為128bit。加密算法與密鑰擴展算法均采用32輪非線性迭代結構,以字(
    發表于 10-30 06:54

    查找表與多項式近似算法實現初等函數

    查找表與多項式近似結合算法一種把查找表算法和多項式近似算法綜合到起的算法。這種
    發表于 10-28 08:10

    BLDC與PMSM電機控制算法的聯系與區別

    脈動小、更加平穩順滑,因此廣泛應用于對控制性能要求高的場合,如工業伺服系統、電動汽車驅動等。 二、 核心控制算法解析? 六步換相法?? l原理: 一種簡單直接的控制方法。它將電機的電周期分為六個區間
    發表于 10-27 09:23

    加密算法的應用

    加密是一種保護信息安全的重要手段,近年來隨著信息技術的發展,加密技術的應用越來越廣泛。本文將介紹加密算法的發展、含義、分類及應用場景。 1. 加密算法的發展 加密算法的歷史可以追
    發表于 10-24 08:03

    一種抗輻射加固檢錯糾錯電路的設計

    電子發燒友網站提供《一種抗輻射加固檢錯糾錯電路的設計.pdf》資料免費下載
    發表于 08-11 15:38 ?0次下載

    一種高效智能的光伏電站管理平臺

    體化(集成多種儲能管理功能等)。用戶根據自身場景和需求,選擇合適光伏電站管理平臺及功能應用配置,從而實現發電效率最大化、運維成本最小化及碳中和目標。 光伏電站管理平臺作為一種智能光伏管理系統,通過光伏智能管理
    的頭像 發表于 07-18 09:20 ?1082次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>高效</b>智能的光伏電站管理平臺

    峰均:你了解多少?

    定義:峰均一種對波形的測量參數,等于波形的振幅除以有效值(RMS)所得到的個比值。對這個定義還有一種理解:峰值的功率和平均功率之比。這里先了解峰值功率:很多信號從
    的頭像 發表于 07-02 17:32 ?3077次閱讀
    峰均<b class='flag-5'>比</b>:你了解多少?

    一種新型寬帶鞭狀套筒天線

    電子發燒友網站提供《一種新型寬帶鞭狀套筒天線.pdf》資料免費下載
    發表于 05-28 14:05 ?0次下載

    一種高精度動態壓電陶瓷驅動電源

    利用高壓大帶寬MOSFET運放和高精度運放組成復合式負反饋放大電路,設計了一種高精度動態壓電陶瓷驅動電源電路圖。
    發表于 04-14 17:31 ?5次下載

    怎么利用matlab得到95%,80%和70%的置信區間,并生成不同區間下的功率誤差貝塔分布?

    matlab仿真 matlab新手,怎么利用matlab得到95%,80%和70%的置信區間,并生成不同區間下的功率誤差貝塔分布
    發表于 04-09 01:21

    一種基于分數階 PID 直流電機調速的 AGV 控制系統

    為設計一種低成本、抗干擾、穩定可靠的 AGV,提出一種基于磁帶導航的 AGV 系統。采用 Megawin 公司的80C51單片機為控制核心,以并排對稱設計的霍爾傳感器實現循跡和糾偏,紅外光
    發表于 03-25 15:10