色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

如何對一維數(shù)組做maxpooling

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:Coder梁 ? 作者:梁唐 ? 2022-04-11 08:41 ? 次閱讀

大家好,我是梁唐。

最近在劍指offer里看到一道算法題很有意思,分享給大家。

題面很簡單,只有一句話,叫做對一維數(shù)組做maxpooling。

可能很多同學(xué)不知道pooling是什么意思,pooling是深度學(xué)習(xí)中的一個術(shù)語,翻譯過來叫做池化。池化的目的是壓縮張量的規(guī)模,張量可以理解成是矩陣。

池化的時候會將一個小窗口在矩陣上移動,每次會對小窗口內(nèi)的元素進(jìn)行計算,得到一個值。不同的池化方法體現(xiàn)在這里的計算的方式不同,比如常見的maxpooling,指的是每次從窗口中找出最大值的操作,再比如常見的sumpooling,則是進(jìn)行求和計算。

我們可以看下下圖,就是一個典型的maxpooling的操作。

如何對一維數(shù)組做maxpooling

池化的時候,窗口的大小是2x2,移動的步長是2,每次都取出這2x2個數(shù)中的最大值,因此叫做最大值池化,英文就是maxpooling。

很明顯經(jīng)過池化之后,矩陣的大小大大壓縮了,如果使用2x2的規(guī)模進(jìn)行池化,得到的結(jié)果是原本的1/4。一般在卷積神經(jīng)網(wǎng)絡(luò)當(dāng)中,由于原始的輸入規(guī)模比較大(圖片或者是視頻),所以會反復(fù)進(jìn)行池化,將原始的張量反復(fù)壓縮,提取出最核心的特征點(diǎn)。

那如果是一維的池化怎么操作呢,其實(shí)是一樣的,只不過窗口也換成了一維的而已。

比如說我們有這樣一個數(shù)組:[12, 20, 30, 0],窗口大小是2,步長是1,那么池化得到的結(jié)果是[20, 30, 30]。

介紹完了pooling的概念之后,我們再回到題目本身:給定一個長度為n的數(shù)組,再給定一個整數(shù)k,要求以k為窗口長度步長為1進(jìn)行maxplooing之后的結(jié)果。

由于步長為1,所以我們一共要求n-k+1個最大整數(shù),每次求最大整數(shù)如果采用遍歷的話,需要遍歷k個元素。那么整體就是,極端情況下,比如k=n/2時,問題的復(fù)雜度為。

這個只是暴力求解的方法,顯然在面試的時候這樣的答案是無法讓面試官滿意的,我們必須要想出更快的方法來。

我們簡單分析一下問題會發(fā)現(xiàn),如果我們把窗口滑動看成是一次求解區(qū)間最大值的操作,那么這樣的操作數(shù)是固定的,也就是n-k+1,這個數(shù)字是固定的,是我們無法改變的。所以如果想要優(yōu)化復(fù)雜度的話,只能從另外一個維度,也就是每次求解時的計算復(fù)雜度入手。

在暴力的方法下,我們每次遍歷k個元素,找到最大值。稍微分析一下就會發(fā)現(xiàn),這里面有大量的重復(fù)。因?yàn)榇翱诘牟介L為1,假設(shè)某一次窗口內(nèi)的元素是,移動之后的元素就是,當(dāng)中有k-1個元素是重復(fù)的。

不難看出,對于每個元素來說,它最多會在k個窗口當(dāng)中出現(xiàn)。對于每一個窗口我們都遍歷了一次,其實(shí)是沒有必要的,這當(dāng)中存在大量的冗余。所以我們要做的就是想辦法優(yōu)化它,盡量讓每個元素只會遍歷一次,或者是遍歷常數(shù)次。

你看,雖然我們現(xiàn)在還是沒有想出解法,但是我們通過分析問題,已經(jīng)找到了方向,正在一步步逼近答案。

順著這個思路我們可以想到,我們可以維護(hù)上一個區(qū)間的最大值,我們假設(shè)這個最大值是m,然后和當(dāng)前區(qū)間新加入的元素進(jìn)行對比,大的那個就是當(dāng)前區(qū)間的答案。

思路上看起來貌似可以,但細(xì)節(jié)上有一些問題。首先,上一個區(qū)間的最大值是可能會過期的。比如上一個區(qū)間剛好第一個元素最大,而當(dāng)前區(qū)間第一個元素是,并不在當(dāng)前區(qū)間里,所以是不能作為答案的。

我們是可以很容易判斷上一個區(qū)間的最大值有沒有過期的,但問題在于如果這個答案過期了,我們就抓瞎了,不知道哪個值是答案了。

那要怎么解決呢?

其實(shí)也很簡單,我們維護(hù)一個最大值會存在過期的問題,那干脆我們維護(hù)多個最大值嘛,我們維護(hù)多個答案,即使剛好因?yàn)閰^(qū)間移動有一個最大值過期了,還有第二個能夠頂上,這樣不就OK了嗎?

的確,這樣就搞定了,整個思路基本上就貫穿了。剩下的問題就是多個最大值如何維護(hù)的問題了,由于要維護(hù)多個值,我們自然需要一個數(shù)據(jù)結(jié)構(gòu)來存儲,只用幾個變量是不行的了。

對于這個數(shù)據(jù)來說,我們讀到了新的數(shù)據(jù)時要很方便插入,對于之前過期的答案我們也要很方便移除,同時還要保證運(yùn)行效率。在這幾個要求的結(jié)合之下,只剩下雙端隊(duì)列這一個選項(xiàng)了。

能想到雙端隊(duì)列,基本上這題就做出一大半了。

剩下的問題就是怎么使用它,由于我們的目的是找到最大值,并且是盡量快地找到合適的最大值,比較容易想到我們可以將雙端隊(duì)列設(shè)計成有序的。我們每次從最大值開始判斷,如果它還在窗口內(nèi),就是答案,如果已經(jīng)超出了,就將它拋棄判斷第二大,循環(huán)往復(fù)直到找到答案。

最后還剩下兩個小問題,第一個小問題是我們怎么判斷最大值是否過期?

很簡單,我們在存儲的時候可以不用存元素的值,而存元素的下標(biāo)。通過下標(biāo)就可以很輕易判斷它是否在窗口內(nèi),如果不在,那么自然說明已經(jīng)過期了。

第二個問題是,每次移動窗口之后讀入新的值如何更新?這也很簡單,我們可以從末尾開始替換掉雙端隊(duì)列中比它小的元素。這樣既更新了隊(duì)列,又保證了隊(duì)列的有序性。

閑言少敘,我們直接來看代碼:

voidget_max_pooling(intn,intk,vector<int>&nums,vector<int>&ans){
deque<int>dque;
//讀入前k個元素
for(inti=0;i-1;i++){
intu=nums[i];
//從隊(duì)列右側(cè)插入,替換掉比它小的元素,保證有序性
while(!dque.empty()&&u>nums[dque.back()]){
dque.pop_back();
}
//插入元素的下標(biāo)而非具體的值
dque.push_back(i);
}
for(inti=k-1;iintu=nums[i];
//更新隊(duì)列,操作同上
while(!dque.empty()&&i-dque.front()>=k){
dque.pop_front();
}
//從隊(duì)首拿到第一個在窗口內(nèi)的元素
while(!dque.empty()&&(u>nums[dque.back()]||i-dque.back()>=k)){
dque.pop_back();
}
dque.push_back(i);
ans.push_back(nums[dque.front()]);
}
}

從代碼來看,這題的代碼量并不大,實(shí)現(xiàn)起來也并不復(fù)雜,但勝在思路巧妙。也算是劍指offer當(dāng)中一道非常經(jīng)典出鏡率很高的題。

如果大家看不明白,可以結(jié)合一下代碼再回過頭去看下算法推導(dǎo)的過程。算法勝在思路而非答案。

好了,關(guān)于這道題就先聊到這里,祝大家日拱一卒。

原文標(biāo)題:劍指算法題,一維數(shù)組求maxpooling

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

審核編輯:湯梓紅


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

    關(guān)注

    23

    文章

    4629

    瀏覽量

    93212
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4823

    瀏覽量

    68918
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    417

    瀏覽量

    26008

原文標(biāo)題:劍指算法題,一維數(shù)組求maxpooling

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

收藏 人收藏

    評論

    相關(guān)推薦

    數(shù)組寫入二數(shù)組

    labview如何將數(shù)組寫入二數(shù)組某列或某行
    發(fā)表于 12-27 17:04

    for循環(huán)及數(shù)組求助

    各位老師,我用for循環(huán)每次截取定數(shù)量的字符串生成數(shù)組,請問怎么能將每次產(chǎn)生的
    發(fā)表于 06-01 12:17

    將多個數(shù)據(jù)插入數(shù)組當(dāng)中

    用循環(huán)做了個個動態(tài)個數(shù)會變的數(shù)組,我想把這些動態(tài)數(shù)組組起來成為
    發(fā)表于 12-18 18:23

    數(shù)組和二數(shù)組的刪重處理

    本帖最后由 zzc_px 于 2015-9-25 09:55 編輯 附件為對二數(shù)組數(shù)組的刪重處理,求大神指點(diǎn)更加效率的方案。
    發(fā)表于 09-24 11:26

    插值點(diǎn)數(shù)組

    插值怎么點(diǎn)數(shù)組,就是x和y坐標(biāo),通過輸入x查出y值
    發(fā)表于 08-10 14:43

    數(shù)組,將連續(xù)3個或3個以上的1視為換行,將數(shù)組轉(zhuǎn)換成二數(shù)組,怎么

    數(shù)組,將連續(xù)3個或3個以上的1視為換行,將數(shù)組
    發(fā)表于 11-24 17:28

    請問如何把簇2數(shù)組分解為兩個數(shù)組

    是利用波形圖表的歷史數(shù)據(jù)屬性節(jié)點(diǎn),把歷史數(shù)據(jù)轉(zhuǎn)換為兩個數(shù)組,再做分析,但是不知道怎么把簇數(shù)組分解為
    發(fā)表于 03-22 11:04

    Labview之自動索引功能(二數(shù)組--數(shù)組

    Labview之自動索引功能(二數(shù)組--數(shù)組),很好的Labview資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 04-19 10:56 ?0次下載

    Labview之數(shù)組數(shù)據(jù)顯示

    Labview之數(shù)組數(shù)據(jù)顯示,很好的Labview資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 04-19 11:30 ?0次下載

    c語言二數(shù)組定義及其規(guī)則詳解

    數(shù)組只有個下標(biāo),,稱為數(shù)組,其
    發(fā)表于 11-16 08:49 ?2.2w次閱讀
    c語言二<b class='flag-5'>維</b><b class='flag-5'>數(shù)組</b>定義及其規(guī)則詳解

    c語言二數(shù)組初始化及使用

    數(shù)組初始化也是在類型說明時給各下標(biāo)變量賦以初值。二數(shù)組可按行分段賦值,也可按行連續(xù)賦值。 數(shù)組
    發(fā)表于 11-16 09:15 ?2w次閱讀
    c語言二<b class='flag-5'>維</b><b class='flag-5'>數(shù)組</b>初始化及使用

    C語言程序設(shè)計教程之二數(shù)組如何應(yīng)用二數(shù)組的資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言程序設(shè)計教程之二數(shù)組如何應(yīng)用二數(shù)組的資料概述主要內(nèi)容包括了:1 了解二
    發(fā)表于 10-26 16:48 ?3次下載

    JAVA教程之數(shù)組和二數(shù)組的介紹和應(yīng)用說明

    聲明數(shù)組就是要確定數(shù)組名、數(shù)組數(shù)和數(shù)組元素的數(shù)據(jù)類型。
    發(fā)表于 01-16 11:02 ?0次下載
    JAVA教程之<b class='flag-5'>一</b><b class='flag-5'>維</b><b class='flag-5'>數(shù)組</b>和二<b class='flag-5'>維</b><b class='flag-5'>數(shù)組</b>的介紹和應(yīng)用說明

    數(shù)組數(shù)組指針以及指針數(shù)組

    數(shù)組數(shù)組指針以及指針數(shù)組
    的頭像 發(fā)表于 08-16 09:02 ?2720次閱讀

    數(shù)組轉(zhuǎn)為二python

    數(shù)組轉(zhuǎn)為二數(shù)組個常見的問題,特別是在處理數(shù)據(jù)時。
    的頭像 發(fā)表于 11-23 14:54 ?5549次閱讀
    主站蜘蛛池模板: 波野结衣qvod | 日本综艺大尺度无删减版在线 | 日韩插啊免费视频在线观看 | 亚洲国产精品线在线观看 | 欧美性猛交AAA片 | 肉动漫无码无删减在线观看 | 2021国产精品视频一区 | 99热最新在线| 久久亚洲AV无码精品午色夜麻豆 | 少妇两个奶头喷出奶水了怎么办 | 中国大陆一级毛片免费 | 色综合a在线 | x8国产精品视频 | 玩50岁四川熟女大白屁股直播 | 国产精品久久国产三级国不卡顿 | 91精品乱码一区二区三区 | 伊人精品久久久大香线蕉99 | 色悠久久久久综合网小说 | 忘忧草日本在线社区WWW电影 | 一级毛片免费播放 | 偷柏自拍亚洲综合在线 | 国产睡熟迷奷系列网站 | 禁漫H天堂免费A漫 | 欧美午夜精品一区区电影 | 欧美日韩精品 | 午夜宅宅伦电影网 | 欧美video巨大粗暴18 | 特黄特色大片免费播放器9 特黄特黄aaaa级毛片免费看 | 亚洲乱亚洲乱妇在线观看 | 优优色影院 | 中文字幕一区中文亚洲 | 欧美另类jizzhd | 后入式啪gif动态图 后入式狂顶免费视频 | 精品久久久亚洲精品中文字幕 | 精品亚洲一区二区三区在线播放 | 中文字幕无码A片久久 | 国产精品亚洲二线在线播放 | 午夜一级毛片看看 | 蜜饯1V1高H- 秘密影院久久综合亚洲综合 | 99RE8国产这里只有精品 | 女人被躁到高潮嗷嗷叫免费 |