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

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

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

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    amb解決排列組合問題

    Posted on 2009-10-19 11:37 dennis 閱讀(3032) 評論(2)  編輯  收藏 所屬分類: 動態語言計算機科學與基礎
      看到這么一個題目:
        {3,2,2,6,7,8}排序輸出,7不在第二位,68不在一起。
     
      這樣的題目似乎避免不了遍歷,關鍵還在于過濾條件的安排,怎么讓過濾的范圍盡量地小。通常的做法是循環遍歷,對于類似Prolog這樣的語言來說,由于內置了推理引擎,可以簡單地描述問題,讓引擎來幫你做遞歸遍歷,解決這類問題是非常簡單的。Prolog好久沒寫,以Ruby的amb操作符為例來解決這道題目:

    #結果為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不能一起出現
    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:不重復,利用全局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來設置,這里安排的只是一種順序,可以根據實際測試結果來安排這些條件的順序以最大程度地提高效率。代碼注釋很清楚了,我就不多嘴了。Ruby amb的實現可以看這里。什么是amb可以看這個



    評論

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

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

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

    2009-10-20 03:18 by 美容
    amb解決排列組合問題 good
    主站蜘蛛池模板: 亚洲国产精华液2020| 亚洲www在线观看| 全部一级一级毛片免费看| 国产成人高清精品免费鸭子| 久久精品国产99国产精品亚洲| 亚洲免费在线视频播放| 亚洲图片中文字幕| 手机在线毛片免费播放| 亚洲人成色777777老人头| 日本成人免费在线| 一级毛片免费不卡直观看| 国产乱辈通伦影片在线播放亚洲| 精品国产污污免费网站入口| 久久精品国产精品亚洲人人 | 亚洲精品无码专区在线播放| 女人18毛片水最多免费观看 | 亚洲成av人片在线观看天堂无码| 猫咪免费人成网站在线观看入口| 亚洲精品偷拍视频免费观看 | 最近中文字幕2019高清免费| 亚洲成在人线电影天堂色| 两个人的视频高清在线观看免费| 亚洲爆乳AAA无码专区| 亚洲Av无码国产情品久久| a毛片在线看片免费| 亚洲天堂电影在线观看| 色播在线永久免费视频| 久99久无码精品视频免费播放| 香蕉蕉亚亚洲aav综合| 免费电影在线观看网站| 九九综合VA免费看| 78成人精品电影在线播放日韩精品电影一区亚洲 | 日本免费观看网站| 两个人看的www视频免费完整版| 久久亚洲精品中文字幕三区| 免费黄色网址网站| 国产精品hd免费观看| 亚洲欧洲日产韩国在线| 日韩免费一级毛片| 久久精品一区二区免费看| 亚洲夂夂婷婷色拍WW47|