2019-11-20區(qū)間貪心

貪心算法

  • 顧名思義,貪心算法總是作出在當(dāng)前看來最好的選擇。也就是說貪心算法并不從整體最優(yōu)考慮,它所作出的選擇只是在某種意義上的局部最優(yōu)選擇。當(dāng)然,希望貪心算法得到的最終結(jié)果也是整體最優(yōu)的。雖然貪心算法不能對所有問題都得到整體最優(yōu)解,但對許多問題它能產(chǎn)生整體最優(yōu)解。如單源最短路經(jīng)問題,最小生成樹問題等。在一些情況下,即使貪心算法不能得到整體最優(yōu)解,其最終結(jié)果卻是最優(yōu)解的很好近似。

  • 該算法存在問題:

    ①不能保證求得的最后解是最佳的;

    ②不能用來求最大或最小解問題;

    ③ 只能求滿足某些約束條件的可行解的范圍。

區(qū)間貪心

  1. 區(qū)間貪心的問題描述
    給出N個(gè)開區(qū)間(x,y),從中選擇盡可能多的開區(qū)間,使得這些區(qū)間兩兩沒有交集。
    考慮:
  • (1)區(qū)間相交
  • (2)區(qū)間不相交
  • (3)區(qū)間包含(特殊的區(qū)間相交)
    2.解決的辦法
  • (1)當(dāng)區(qū)間包含時(shí),我們只留小區(qū)間。
  • (2)然后我們將所有區(qū)間的左端點(diǎn)也就是 x 從大到小排序,然后每次找出右端點(diǎn)在這個(gè)左端點(diǎn)左面的就是一個(gè),然后選取這個(gè)區(qū)間的左端點(diǎn)作為下次判斷的標(biāo)準(zhǔn),當(dāng)左端點(diǎn)相同時(shí),按照右端點(diǎn) y 從小到大排序,就是我們檢查時(shí)先檢查(左端點(diǎn)相同時(shí))右端點(diǎn)小的(正好可以去去除區(qū)間包含的大區(qū)間)
  • 首先明確一個(gè)問題:假設(shè)有兩個(gè)區(qū)間x,y,區(qū)間x完全包含y。那么,選x是不劃算的,因 為x和y最多只能選一個(gè),選x還不如選y,這樣不僅區(qū)間數(shù)目不會(huì)減少,而且給其他區(qū)間留出 了更多的位置。接下來,按照bi從小到大的順序給區(qū)間排序。
    貪心策略是:一定要選第一個(gè) 區(qū)間。


    圖1
  • 來看圖1中的區(qū)間1和區(qū)間2:
    如果區(qū)間2和區(qū)間1完全 不相交,那么沒有影響(因此一定要選區(qū)間1),否則區(qū)間1和區(qū)間2最多只能選一個(gè)。如果 不選區(qū)間2,區(qū)間1的①部分其實(shí)是沒有任何影響的(它不會(huì)擋住任何一個(gè)區(qū)間),區(qū)間1的有效部 分其實(shí)變成了②部分,它被區(qū)間2所包含!由剛才的結(jié)論,區(qū)間2是不能選的。依此類推, 不能因?yàn)檫x任何區(qū)間而放棄區(qū)間1,因此選擇區(qū)間1是明智的。
    選擇了區(qū)間1以后,需要把所有和區(qū)間1相交的區(qū)間排除在外,需要記錄上一個(gè)被選擇的 區(qū)間編號(hào)。這樣,在排序后只需要掃描一次即可完成貪心過程,得到正確結(jié)果。

參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容