• <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)給定一個(gè)整數(shù)序列以及一個(gè)數(shù)X,確定該序列中是否有兩個(gè)數(shù)的和為X

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

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

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

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

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

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


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

            評論

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

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

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

            首先nlogn的快排
            其次設(shè)一個(gè)首指針head 設(shè)一個(gè)尾指針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)給定一個(gè)整數(shù)序列以及一個(gè)數(shù)X,確定該序列中是否有兩個(gè)數(shù)的和為X[未登錄]  回復(fù)  更多評論   

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

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

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

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

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

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

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

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

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

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

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

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

            8回到5

            2009-10-02 04:26 | lzonline01

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

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

            比如1,3,4,4,5,8 X = 8
            2011-02-23 13:17 | wtommy
            精品久久久久久久久中文字幕| 久久国产三级无码一区二区| 99久久国产精品免费一区二区| 日韩欧美亚洲综合久久| 亚洲女久久久噜噜噜熟女| 亚洲国产另类久久久精品黑人| 青青草国产精品久久久久| 国产精品美女久久福利网站| 97超级碰碰碰久久久久| 久久影院久久香蕉国产线看观看| 久久精品国产清自在天天线 | 久久久久一区二区三区| 久久综合色之久久综合| 99久久精品毛片免费播放| 亚洲精品国精品久久99热| 久久久国产精品亚洲一区| 亚洲日韩欧美一区久久久久我| 97r久久精品国产99国产精| 欧美一区二区久久精品| 国产AV影片久久久久久| 99久久国产综合精品麻豆| 久久久久人妻一区二区三区| 久久人人爽人人澡人人高潮AV| 国产精品无码久久久久久| 亚洲国产精品高清久久久| 久久亚洲精品无码播放| 国产亚洲美女精品久久久| 国产精品久久影院| 久久久久久久亚洲Av无码| 欧美熟妇另类久久久久久不卡| 久久99热这里只频精品6| 亚洲国产视频久久| 欧美日韩久久中文字幕| 中文成人久久久久影院免费观看| 久久97久久97精品免视看| 久久91精品综合国产首页| 久久久久久毛片免费看| 麻豆国内精品久久久久久| 欧美日韩精品久久久久| 国产69精品久久久久9999APGF| 囯产极品美女高潮无套久久久|