莊周夢蝶

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

          scheme解約瑟夫環問題

          Posted on 2008-03-20 19:15 dennis 閱讀(745) 評論(2)  編輯  收藏 所屬分類: 計算機科學與基礎
              看了javaeye上一個解決約瑟夫環的問題的帖子,就想能不能用scheme來解決。如果采用推導出的數學公式來處理當然很簡單了:
          (define (joseph n m)
            (define (joseph
          -iter init s)
              (
          if (> init n)
                  (
          + s 1)
                  (joseph
          -iter (+ init 1) (remainder (+ s m) init))))
            (joseph
          -iter 2 0))
              我想是否可以用一般的模擬算法來實現?也就是模擬一個循環鏈表,每次刪除第m個元素。弄了個比較丑陋的實現:

          (define (enumrate-interval low high)
            (
          if (> low high)
                
          '()
                (cons low (enumrate-interval (+ low 1) high))))
          (define (delete
          -last list)
            (
          if (eq? (cdr list) '())
                '()
                (cons (car list) (delete-last (cdr list)))))

          (define (joseph
          -iter init list it) 
            (let ((m (remainder it (length list))))
             (cond ((
          = m 0) (delete-last list))
                   ((
          = m 1) (append (cdr list) (reverse init)))
                   (
          else
                     (joseph
          -iter (cons (car list) init) (cdr list) (- m 1))))))
          (define (joseph n m)
              (define (joseph
          -list list m)
                (display list) 
                (newline)
                (
          if (eq? (cdr list) '())
                    (car list)
                    (joseph
          -list (joseph-iter '() list m) m)))

          計算(joseph 8 3)的過程如下:
          (1 2 3 4 5 6 7 8)
          (4 5 6 7 8 1 2)
          (7 8 1 2 4 5)
          (2 4 5 7 8)
          (7 8 2 4)
          (4 7 8)
          (4 7)
          (7)
          7

          看了這個計算過程就知道我這個方法多糟糕,每次都重新構造列表。不知道看blog的大大們有沒有更好的思路?


          評論

          # re: scheme解約瑟夫環問題[未登錄]  回復  更多評論   

          2008-03-20 20:49 by bobo
          如果用流的話就不需要每次都構造列表了呀..

          # re: scheme解約瑟夫環問題[未登錄]  回復  更多評論   

          2008-03-21 10:09 by bobo
          不過就算是用流,也是感覺怪怪的。。。
          主站蜘蛛池模板: 漠河县| 酒泉市| 雷山县| 永丰县| 临猗县| 额敏县| 玉门市| 增城市| 哈尔滨市| 云林县| 安徽省| 镇康县| 新巴尔虎右旗| 山阳县| 吉木萨尔县| 施甸县| 洛浦县| 会宁县| 孟村| 临漳县| 海晏县| 贺兰县| 衡东县| 衡阳县| 东宁县| 石屏县| 郓城县| 大石桥市| 保亭| 德兴市| 沙河市| 孟州市| 恭城| 望江县| 富源县| 深州市| 襄樊市| 固原市| 天津市| 土默特左旗| 洛隆县|