<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理
      看到這么一個題目:
        {3,2,2,6,7,8}排序輸出,7不在第二位,68不在一起。
     
      這樣的題目似乎避免不了遍歷,關(guān)鍵還在于過濾條件的安排,怎么讓過濾的范圍盡量地小。通常的做法是循環(huán)遍歷,對于類似Prolog這樣的語言來說,由于內(nèi)置了推理引擎,可以簡單地描述問題,讓引擎來幫你做遞歸遍歷,解決這類問題是非常簡單的。Prolog好久沒寫,以Ruby的amb操作符為例來解決這道題目:

    #結(jié)果為hash,去重
    $hash={}
    amb
    =Amb.new
    array
    =[3,2,2,6,7,8]
    class << array
     alias remove delete
     
    def delete(*nums)
       result
    =dup
       nums.each do 
    |n|
        result.delete_at(result.index(n)) 
    if result.index(n)
       end
       result
     end
    end
    #從集合選元素
    one=amb.choose(*array)
    two
    =amb.choose(*(array.delete(one)))
    three
    =amb.choose(*(array.delete(one,two)))
    four
    =amb.choose(*(array.delete(one,two,three)))
    five
    =amb.choose(*(array.delete(one,two,three,four)))
    six
    =amb.choose(*(array.delete(one,two,three,four,five)))

    #條件1:第二個位置不能是7
    amb.require(two!=7)
    #條件2:6跟8不能一起出現(xiàn)
    def six_eight_not_join(a,b)
       
    "#{a}#{b}"!="68"&&"#{a}#{b}"!="86"
    end
    amb.require(six_eight_not_join(one,two))
    amb.require(six_eight_not_join(two,three))
    amb.require(six_eight_not_join(three,four))
    amb.require(six_eight_not_join(four,five))
    amb.require(six_eight_not_join(five,six))

    #條件3:不重復(fù),利用全局hash判斷
    def distinct?(one,two,three,four,five,six)
      
    if $hash["#{one},#{two},#{three},#{four},#{five},#{six}"].nil?
         $hash[
    "#{one},#{two},#{three},#{four},#{five},#{six}"]=1 #記錄
         true
      
    else
         false
      end
    end
    amb.require(distinct?(one,two,three,four,five,six))
    puts 
    "#{one},#{two},#{three},#{four},#{five},#{six}"
    amb.failure


       三個條件的滿足通過amb.require來設(shè)置,這里安排的只是一種順序,可以根據(jù)實際測試結(jié)果來安排這些條件的順序以最大程度地提高效率。代碼注釋很清楚了,我就不多嘴了。Ruby amb的實現(xiàn)可以看這里。什么是amb可以看這個



    評論

    # re: amb解決排列組合問題  回復(fù)  更多評論   

    2009-10-19 17:48 by 淘寶皇冠大全
    謝謝分享!

    # re: amb解決排列組合問題  回復(fù)  更多評論   

    2009-10-20 03:18 by 美容
    amb解決排列組合問題 good
    主站蜘蛛池模板: 免费真实播放国产乱子伦| 国产免费毛不卡片| 国产免费av一区二区三区| 亚洲av专区无码观看精品天堂| 99在线视频免费| 亚洲国产精品嫩草影院在线观看| 精品国产污污免费网站入口| 亚洲国产黄在线观看| yellow视频免费看| 亚洲va无码专区国产乱码| 国产成人精品一区二区三区免费 | 国产美女精品视频免费观看| 亚洲依依成人亚洲社区| 日本高清免费不卡视频| 成人一级免费视频| 亚洲国产精品特色大片观看完整版| 91精品成人免费国产| 久久精品国产亚洲av日韩| 色婷婷7777免费视频在线观看| 亚洲精品一二三区| 亚洲色欲久久久久综合网| AAA日本高清在线播放免费观看| 亚洲福利一区二区三区| 成人免费毛片视频| 黄色一级视频免费| 亚洲AV无码国产精品麻豆天美| 亚州免费一级毛片| 久久亚洲精品无码gv| 黑人大战亚洲人精品一区| 18禁止看的免费污网站| 亚洲乱亚洲乱妇无码| 亚洲中文久久精品无码| 色播精品免费小视频| 色偷偷亚洲第一综合| 久久精品国产精品亚洲艾| 成人毛片免费观看视频| 成年免费a级毛片免费看无码| 亚洲国产精品成人精品小说| 免费一级e一片在线播放| 免费精品无码AV片在线观看| 最新亚洲人成网站在线观看|