• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            那誰的技術(shù)博客

            感興趣領(lǐng)域:高性能服務(wù)器編程,存儲,算法,Linux內(nèi)核
            隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
            數(shù)據(jù)加載中……

            (算法導(dǎo)論習(xí)題解exercise2.3-7)給定一個整數(shù)序列以及一個數(shù)X,確定該序列中是否有兩個數(shù)的和為X

            這是<<算法導(dǎo)論>>中的一題,exercise 2.3-7.

            可以這么做:
            1) 首先將序列排序,去掉重復(fù)的元素.
            2) 其次生成一個序列, 該序列中每個元素都是X-原序列中的值, 同樣的,去重.
            3) 對這兩個已經(jīng)排序好的序列進(jìn)行合并操作.
            4) 如果有兩個元素之和為X, 那么在合并的時候必然是相鄰的元素.

            比如序列 1, 3, 5, 8, X=8, 生成的新序列排序之后就是0, 3, 5, 7.在合并操作時出現(xiàn)兩個相鄰的3,因此該序列中存在3和5之和為8.

            我想的另一種做法:
            遍歷序列, 每次遍歷時將X-序列元素的差放入到另一個新的序列中的合適位置去, 使這個新的序列一直都是有序的.同樣的, 每次遍歷的時候都在這個新的序列中搜索是否存在當(dāng)前元素, 由于是有序的, 所以可以采用二分查找的方法.
            比如對于序列5,1,8,3, X=8.
            首先遍歷的元素是5, 此時新的序列是空的,將8-5=3放入到新的序列中.
            其次遍歷的元素是1, 此時新的序列只有元素3, 將8-1=7放入到新的序列中, 形成3,7的有序序列.
            再次遍歷的元素是8, 此時新的序列為3,7, 將8-8=0放入到新的序列中, 形成0,3,7的有序序列.
            最后遍歷的元素是3, 此時新的序列是0,3,7, 查找3成功, 退出.

            不過, 很顯然, 第二種方法并不能達(dá)到題目要求的nlg(n)的要求.但是, 它的優(yōu)點在于, 不一定非得遍歷完序列的所有元素就可以找到答案.

            另外,這個題目給我的另一個啟示就是,在很多問題中, 排序和搜索算法絕對是最基礎(chǔ)的組成部分,你可能不會直接使用到它們, 但是會間接的使用或者借鑒到其中的想法幫助你解決問題.所以, 不管是效率比較低的插入算法也好, 還是快速排序也好, 都要進(jìn)行研究, 并且掌握其中蘊(yùn)藏的思想.


            posted on 2008-09-29 10:40 那誰 閱讀(3740) 評論(7)  編輯 收藏 引用 所屬分類: 算法與數(shù)據(jù)結(jié)構(gòu)

            評論

            # re: (算法導(dǎo)論習(xí)題解ex2.3-7)給定一個整數(shù)序列以及一個數(shù)X,確定該序列中是否有兩個數(shù)的和為X  回復(fù)  更多評論   

            排序,然后枚舉+原序列二分(X-a[i])不行嗎?
            2008-09-29 11:53 | Ernls

            # re: (算法導(dǎo)論習(xí)題解exercise2.3-7)給定一個整數(shù)序列以及一個數(shù)X,確定該序列中是否有兩個數(shù)的和為X[未登錄]  回復(fù)  更多評論   

            首先nlogn的快排
            其次設(shè)一個首指針head 設(shè)一個尾指針tail
            while(head!=tail)
            {
            if(*head+*tail < num) head++;
            elseif(*head+*tail>num) tail--;
            else break;

            }

            if (head == tail)std::cout<<"Not found!";
            else
            std::cout<<*head<<" "<<*tail<<std::endl;

            復(fù)雜度是o(nlogn+n)=o(nlogn)
            2008-09-30 17:01 | Uo

            # re: (算法導(dǎo)論習(xí)題解exercise2.3-7)給定一個整數(shù)序列以及一個數(shù)X,確定該序列中是否有兩個數(shù)的和為X[未登錄]  回復(fù)  更多評論   

            @Uo
            嗯,樓上這個方法也不錯.
            2008-09-30 20:09 | 創(chuàng)

            # re: (算法導(dǎo)論習(xí)題解exercise2.3-7)給定一個整數(shù)序列以及一個數(shù)X,確定該序列中是否有兩個數(shù)的和為X[未登錄]  回復(fù)  更多評論   

            算法導(dǎo)論給出的算法復(fù)雜度精確計算應(yīng)為nlgn+2*n 額外輔助空間為o(n)
            上面那個算法空間復(fù)雜度o(1),算法復(fù)雜度精確為nlgn+n
            2008-10-01 01:27 | Uo

            # re: (算法導(dǎo)論習(xí)題解exercise2.3-7)給定一個整數(shù)序列以及一個數(shù)X,確定該序列中是否有兩個數(shù)的和為X  回復(fù)  更多評論   

            @Uo
            沒有回潄,很不嚴(yán)密
            2008-11-11 10:25 | Romeo

            # re: (算法導(dǎo)論習(xí)題解exercise2.3-7)給定一個整數(shù)序列以及一個數(shù)X,確定該序列中是否有兩個數(shù)的和為X  回復(fù)  更多評論   

            1.先排序,
            2.然后 按照 n / 2 對序列進(jìn)行二分查找

            3.然后根據(jù)查找的結(jié)果將 原序列分成A和B兩個部分

            4.然后對A中的每個元素a進(jìn)行X-a在B中進(jìn)行二分查找

            5. 如果找到則結(jié)束

            6.如果沒有找到則根據(jù)在B中查找的結(jié)果將B二分為B1和B2

            7然后對A中的下一個元素a1進(jìn)行X-a1在B2中二分查找查找

            8回到5

            2009-10-02 04:26 | lzonline01

            # re: (算法導(dǎo)論習(xí)題解exercise2.3-7)給定一個整數(shù)序列以及一個數(shù)X,確定該序列中是否有兩個數(shù)的和為X  回復(fù)  更多評論   

            如果原數(shù)組中有重復(fù)的兩個數(shù),正好他們相加等于X呢?這樣博主的第一步”1) 首先將序列排序,去掉重復(fù)的元素.“就有問題了。

            比如1,3,4,4,5,8 X = 8
            2011-02-23 13:17 | wtommy
            香蕉久久AⅤ一区二区三区| 亚洲色大成网站www久久九| 亚洲国产精品久久久久网站 | 亚洲中文久久精品无码ww16| 伊人久久大香线蕉AV色婷婷色 | 亚洲精品国产综合久久一线| 久久强奷乱码老熟女网站 | 色妞色综合久久夜夜| 激情伊人五月天久久综合| 国产精品伊人久久伊人电影| 国产亚洲精品久久久久秋霞| 中文字幕亚洲综合久久2| 久久久久久久精品成人热色戒 | 欧美日韩精品久久久久| 国产国产成人精品久久| 国产偷久久久精品专区| 日韩久久无码免费毛片软件| 久久777国产线看观看精品| 狠狠色噜噜色狠狠狠综合久久| 久久精品国产国产精品四凭| 国产人久久人人人人爽| 久久精品日日躁夜夜躁欧美| 久久精品国产清自在天天线| 2021少妇久久久久久久久久| 麻豆AV一区二区三区久久| 久久久久久久免费视频| 久久人人爽人爽人人爽av| 国产精品成人久久久久三级午夜电影| 99久久精品午夜一区二区| 久久久久成人精品无码中文字幕 | 狠狠色丁香久久婷婷综合_中| 国内精品人妻无码久久久影院| 久久精品国产亚洲αv忘忧草| 亚洲色欲久久久久综合网| 一个色综合久久| 99久久做夜夜爱天天做精品| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 91亚洲国产成人久久精品| 久久精品成人国产午夜| 欧美精品一区二区精品久久 | 亚洲国产精品无码久久久秋霞2|