chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一種比線段樹(shù)還高效的區(qū)間算法

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:小K算法 ? 作者:小K算法 ? 2022-04-11 09:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01 故事起源

有N個(gè)數(shù)排列成一排,給定一個(gè)區(qū)間,如何快速找出區(qū)間內(nèi)最大的數(shù)是多少呢?

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

02 分析

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

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

再來(lái)分析一下有什么特點(diǎn)呢?

這些數(shù)不會(huì)更改,所以每個(gè)區(qū)間的結(jié)果是不會(huì)變的,是否可以把所有的區(qū)間結(jié)果先計(jì)算出來(lái)?

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

如果數(shù)據(jù)規(guī)模很小確實(shí)可以,一旦數(shù)據(jù)過(guò)大肯定就不行了,因?yàn)闀r(shí)間和空間都是O(n^2)。

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

再考慮一下,區(qū)間的最值是有很強(qiáng)的傳遞關(guān)系,這就引導(dǎo)我們可以把大問(wèn)題化為小問(wèn)題。

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

很顯然,這就是一個(gè)標(biāo)準(zhǔn)的線段樹(shù)模型,不過(guò)今天我們?cè)贀Q一個(gè)更加高效的算法,稀疏表。 03 稀疏表稀疏表的思想就是提前預(yù)處理數(shù)據(jù),所以主要針對(duì)數(shù)據(jù)不變的情況,而線段樹(shù)更加靈活,可以動(dòng)態(tài)維護(hù)數(shù)據(jù)的變化。

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

第2章節(jié)中,我們枚舉了所有的區(qū)間情況,可以看出其實(shí)有很多重復(fù)的情況,比如下面[0,3]其實(shí)可以通過(guò)[0,1]和[2,3]組合出來(lái)。

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

可以根據(jù)長(zhǎng)度劃分區(qū)間。

設(shè)數(shù)組為a[i],f[i][j]表示區(qū)間[i,j]的最大值。

則長(zhǎng)度為1的區(qū)間總共有n個(gè),f[i][i]=a[i]。

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

長(zhǎng)度為2的區(qū)間總共有n-1個(gè)。

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

因?yàn)橹耙呀?jīng)求出了長(zhǎng)度為1的區(qū)間的最大值,所以區(qū)間長(zhǎng)度為2的最大值可以通過(guò)區(qū)間長(zhǎng)度為1的結(jié)果直接推出來(lái)。

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

接下來(lái)就考慮長(zhǎng)度為3的區(qū)間了嗎?

其實(shí)并不是,因?yàn)榍懊嬉呀?jīng)有了長(zhǎng)度為1和2的,所以可以組合出長(zhǎng)度為3和4的。

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

那就直接考慮長(zhǎng)度為5的嗎?

如果考慮為5的,那你怎么計(jì)算呢,前面的也推不出長(zhǎng)度為5的結(jié)果啊,至少得有3個(gè)區(qū)間才能推出來(lái)

。

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

所以接下來(lái)考慮長(zhǎng)度為4的區(qū)間才是正解,總共有n-3個(gè)。

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

再接下來(lái)自然就是考慮長(zhǎng)度為8的區(qū)間了,總共有n-7個(gè)。

但這里有個(gè)很明顯的問(wèn)題,就是我們的數(shù)組f[i,j]定義的不合理,因?yàn)槔锩婧芏嗟男^(qū)間沒(méi)有用上,比如長(zhǎng)度為3,5,6,7等,所以需要重新定義。 04 狀態(tài)壓縮可以將第二維用于表示區(qū)間長(zhǎng)度,第一維表示區(qū)間起點(diǎn),對(duì)第二維就可以進(jìn)行狀態(tài)壓縮。

設(shè)f[i,j]表示從i開(kāi)始,長(zhǎng)度為2^j的區(qū)間的最大值,即區(qū)間[i,i+2^j-1]。

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

則長(zhǎng)度為2^j的區(qū)間就可以通過(guò)左右2個(gè)長(zhǎng)度為2^(j-1)的區(qū)間推出結(jié)果。時(shí)間和空間的復(fù)雜度都為O(nlogn)。

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

05 區(qū)間分解

那查詢結(jié)果的時(shí)候要怎么處理呢,我們只計(jì)算了長(zhǎng)度為2^j的區(qū)間,并沒(méi)有計(jì)算長(zhǎng)度為3、5、7等區(qū)間的結(jié)果。

所以這個(gè)處理和線段樹(shù)的思想也類似,需要進(jìn)行區(qū)間分解。不過(guò)線段樹(shù)可能分解成很多個(gè)區(qū)間,而稀疏表只需要分解成2個(gè)區(qū)間就可以了。

對(duì)于任意區(qū)間[a,b],長(zhǎng)度為b-a+1,總可以找到2個(gè)長(zhǎng)度為2^j的區(qū)間,這2個(gè)區(qū)間組合起來(lái)可以完全覆蓋[a,b],其中j的值為log(b-a+1)。

左邊的區(qū)間左端點(diǎn)從a開(kāi)始,長(zhǎng)度為2^j,即區(qū)間[a,a+2^j-1]。右邊的區(qū)間右端點(diǎn)從b開(kāi)始,長(zhǎng)度為2^j,即區(qū)間[b-2^j+1,b]。

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

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

06 代碼實(shí)現(xiàn)

代碼實(shí)現(xiàn)了最大值和最小值的獲取。

6.1變量定義

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

6.1預(yù)處理

void solve() {

// 枚舉區(qū)間長(zhǎng)度,2^j《=n

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

// 枚舉左端點(diǎn)i,右端點(diǎn)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函數(shù)

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 總結(jié)

對(duì)于數(shù)據(jù)不變的情況,可以用稀疏表預(yù)處理,這種屬于離線算法。如果要?jiǎng)討B(tài)維護(hù)變化,動(dòng)態(tài)查詢,那就得用在線算法,比如線段樹(shù)。但稀疏表的效率確實(shí)高,有狀態(tài)壓縮和動(dòng)態(tài)規(guī)劃的思想,值得深入研究學(xué)習(xí)。

--- EOF ---

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4743

    瀏覽量

    96888
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4401

    瀏覽量

    66521

原文標(biāo)題:一種比線段樹(shù)還高效的區(qū)間算法

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一種高效智能的光伏電站管理平臺(tái)

    儲(chǔ)體化(集成多種儲(chǔ)能管理功能等)。用戶根據(jù)自身場(chǎng)景和需求,選擇合適光伏電站管理平臺(tái)及功能應(yīng)用配置,從而實(shí)現(xiàn)發(fā)電效率最大化、運(yùn)維成本最小化及碳中和目標(biāo)。 光伏電站管理平臺(tái)作為一種智能光伏管理系統(tǒng),通過(guò)光伏智能管理
    的頭像 發(fā)表于 07-18 09:20 ?596次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>高效</b>智能的光伏電站管理平臺(tái)

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

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

    一種基于分?jǐn)?shù)階 PID 直流電機(jī)調(diào)速的 AGV 控制系統(tǒng)

    為設(shè)計(jì)一種低成本、抗干擾、穩(wěn)定可靠的 AGV,提出一種基于磁帶導(dǎo)航的 AGV 系統(tǒng)。采用 Megawin 公司的80C51單片機(jī)為控制核心,以并排對(duì)稱設(shè)計(jì)的霍爾傳感器實(shí)現(xiàn)循跡和糾偏,紅外光
    發(fā)表于 03-25 15:10

    樹(shù)科技在物聯(lián)網(wǎng)方面

    樹(shù)科技在物聯(lián)網(wǎng)領(lǐng)域有多方面的涉及和發(fā)展,以下是些具體信息: 傳感器技術(shù)合作 與傳感器公司合作:宇樹(shù)科技與些傳感器技術(shù)公司有合作,例如奧
    發(fā)表于 02-04 06:48

    xgboost的并行計(jì)算原理

    在大數(shù)據(jù)時(shí)代,機(jī)器學(xué)習(xí)算法需要處理的數(shù)據(jù)量日益增長(zhǎng)。為了提高數(shù)據(jù)處理的效率,許多算法都開(kāi)始支持并行計(jì)算。XGBoost作為一種高效的梯度提升樹(shù)
    的頭像 發(fā)表于 01-19 11:17 ?1436次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備樹(shù)之設(shè)備樹(shù)組成和結(jié)構(gòu)

    項(xiàng)技能。設(shè)備樹(shù)的起源設(shè)備樹(shù)(Device Tree)是一種描述硬件資源的數(shù)據(jù)結(jié)構(gòu),它由uboot傳遞給Linux內(nèi)核,被內(nèi)核解析,內(nèi)核根據(jù)設(shè)備樹(shù)
    發(fā)表于 01-07 09:16

    ADS1292測(cè)量ECG,三個(gè)導(dǎo)聯(lián)測(cè)量,測(cè)得的心電信號(hào)波形,對(duì)多數(shù)人的測(cè)量結(jié)果都是T波R波還高而且很寬,為什么?

    使用TI官方方案ADS1292測(cè)量ECG,三個(gè)導(dǎo)聯(lián)測(cè)量,測(cè)得的心電信號(hào)波形,對(duì)多數(shù)人的測(cè)量結(jié)果都是T波R波還高而且很寬,只有對(duì)少數(shù)人才正常,是什么原因?
    發(fā)表于 12-24 07:55

    一種新型高效率的服務(wù)器電源系統(tǒng)

    一種新型高效率的服務(wù)器電源系統(tǒng)
    發(fā)表于 12-19 16:45 ?1次下載

    常見(jiàn)的加密算法有哪些?它們各自的優(yōu)勢(shì)是什么?

    常見(jiàn)的加密算法及其優(yōu)勢(shì)如下: AES(Advanced Encryption Standard): AES是一種對(duì)稱加密算法,采用分組密碼體制,支持128位、192位和256位密鑰長(zhǎng)度。AES的優(yōu)勢(shì)
    的頭像 發(fā)表于 12-17 15:57 ?1594次閱讀

    DAC的高次諧波為什么都會(huì)折疊回第奈奎斯特區(qū)間?

    如題,在看到的DDS和DAC的資料上都會(huì)提到DAC內(nèi)部的非線性造成的高次諧波會(huì)被折疊回第奈奎斯特區(qū)間。不太理解的地方是DAC里并沒(méi)有采樣的過(guò)程???DAC只是個(gè)乘以sin(x)/x和低通濾波
    發(fā)表于 12-11 07:05

    一種混合顏料光譜分區(qū)間識(shí)別方法

    古代彩繪顏料的分析是科技考古與文物保護(hù)研究的重要內(nèi)容,高光譜是近年來(lái)發(fā)展迅速的新興技術(shù),在物質(zhì)識(shí)別上具有廣泛應(yīng)用,提出一種基于高光譜分區(qū)間的混合顏料識(shí)別方法。 一種混合顏料光譜分區(qū)間識(shí)
    的頭像 發(fā)表于 12-02 16:22 ?663次閱讀
    <b class='flag-5'>一種</b>混合顏料光譜分<b class='flag-5'>區(qū)間</b>識(shí)別方法

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+本介紹基礎(chǔ)硬件算法模塊實(shí)現(xiàn)的好書(shū)

    看下本書(shū)內(nèi)容簡(jiǎn)介,然后再瀏覽下各個(gè)章節(jié)的內(nèi)容。 從簡(jiǎn)介來(lái)看,本書(shū)也是關(guān)注最基礎(chǔ),最常用的那部分算法的電路實(shí)現(xiàn),比較貼合工程實(shí)踐,適合無(wú)基礎(chǔ)或者有定基礎(chǔ)的線工程人員閱讀。內(nèi)容選擇是貼合實(shí)踐
    發(fā)表于 11-20 13:42

    華納云:Chord算法如何管理節(jié)點(diǎn)間的聯(lián)系?

    Chord算法一種分布式哈希表(DHT)協(xié)議,它通過(guò)構(gòu)建個(gè)環(huán)狀結(jié)構(gòu)來(lái)管理節(jié)點(diǎn)間的聯(lián)系。以下是Chord算法如何管理節(jié)點(diǎn)間聯(lián)系的具體方式: 環(huán)狀結(jié)構(gòu): Chord
    發(fā)表于 11-08 16:03

    一種基于深度學(xué)習(xí)的二維拉曼光譜算法

    近日,天津大學(xué)精密儀器與光電子工程學(xué)院的光子芯片實(shí)驗(yàn)室提出了一種基于深度學(xué)習(xí)的二維拉曼光譜算法,成果以“Rapid and accurate bacteria identification
    的頭像 發(fā)表于 11-07 09:08 ?1094次閱讀
    <b class='flag-5'>一種</b>基于深度學(xué)習(xí)的二維拉曼光譜<b class='flag-5'>算法</b>

    愛(ài)普生開(kāi)發(fā)了一種烤箱控制的晶體振蕩器,其功耗傳統(tǒng)OCXOs1低56%

    愛(ài)普生開(kāi)發(fā)了一種烤箱控制的晶體振蕩器,其功耗傳統(tǒng)OCXOs1低56%-該振蕩器小巧且節(jié)能,是下代通信基礎(chǔ)設(shè)施中參考信號(hào)源應(yīng)用的理想選擇-精工愛(ài)普生公司(TSE:6724,“愛(ài)普生”)開(kāi)發(fā)了
    的頭像 發(fā)表于 10-29 11:28 ?800次閱讀
    愛(ài)普生開(kāi)發(fā)了<b class='flag-5'>一種</b>烤箱控制的晶體振蕩器,其功耗<b class='flag-5'>比</b>傳統(tǒng)OCXOs1低56%