• <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)排序好的序列進行合并操作.
            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成功, 退出.

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

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


            posted on 2008-09-29 10:40 那誰 閱讀(3717) 評論(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 對序列進行二分查找

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

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

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

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

            7然后對A中的下一個元素a1進行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
            午夜天堂av天堂久久久| 免费一级欧美大片久久网| 久久精品国产亚洲精品2020| 69久久夜色精品国产69| 日韩精品久久久久久| 久久久久黑人强伦姧人妻| 香蕉久久夜色精品国产小说| 合区精品久久久中文字幕一区| 精品国产乱码久久久久软件| 久久精品国产99国产精品亚洲| 精品久久久久久中文字幕大豆网| 777米奇久久最新地址| 无码乱码观看精品久久| 国内精品久久久久久久97牛牛| 久久国产成人精品国产成人亚洲| 囯产精品久久久久久久久蜜桃| 欧美久久精品一级c片片| 99久久精品免费看国产一区二区三区| 国产91久久综合| 99久久99这里只有免费的精品| 日韩影院久久| yellow中文字幕久久网| 精品乱码久久久久久久| 99久久国产精品免费一区二区| 青青青青久久精品国产| 久久精品亚洲一区二区三区浴池 | 久久精品国产亚洲Aⅴ香蕉| 99久久夜色精品国产网站| 久久久久国产一区二区| 久久久久久久久久免免费精品| 久久国产高清字幕中文| 99久久中文字幕| 国产精品免费福利久久| 久久精品国产亚洲AV无码麻豆| 久久精品国产免费观看三人同眠| 一级女性全黄久久生活片免费| 久久久99精品一区二区| 日韩久久无码免费毛片软件| 久久99这里只有精品国产| 三级三级久久三级久久| 国产成人精品综合久久久|