`

scheme解决约瑟夫环问题

阅读更多

    看了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

看了这个计算过程就知道我这个方法多糟糕,每次都重新构造列表。不知道牛人们有没有更好的思路来实现模拟算法?

分享到:
评论
3 楼 dennis_zane 2008-05-04  
嗯,我觉的各位偏离我的我的意思了,我的意思是用单向循环链表的传统方式来解决这个问题,不过已经解决,谢谢。
2 楼 manbearpig1 2008-05-03  
约瑟夫环的有O(1)的解,类似于位运算左移一位,具体数学(concrete maths)第一章有详细证明。
1 楼 lichray 2008-03-21  
用列表实现循环链表然后还随机删除。。。。这效率。。。。

相关推荐

    scheme实现的八皇后

    对比C++和Java,它们属于面向对象的编程语言,解决问题的方式略有不同。在C++中,我们可能需要定义一个类来表示棋盘状态,然后使用对象实例来存储当前的皇后位置。通过重载运算符来检查冲突,并使用迭代或递归的方式...

    解决报错ERR_UNKNOWN_URL_SCHEME源码.zip

    解决"ERR_UNKNOWN_URL_SCHEME"的问题通常涉及以下几个步骤: 1. **检查URL格式**:确保URL的协议部分(如http://或https://)是正确的,并且被WebView支持。 2. **自定义WebViewClient**:覆盖`...

    scheme实现唤醒外部app

    在移动应用开发中,"scheme"是一种常见的机制,用于实现应用程序间的交互,即从一个应用启动另一个应用。本文将深入探讨scheme如何实现唤醒外部APP,以及它在Webview和浏览器环境中的应用。 首先,理解scheme的基本...

    八皇后问题的scheme解法(queen8.scm)

    收集的用scheme语言编写的八皇后的解法,对学习scheme语言想理解递归的同志们是一个好例子,sicp中也有此练习题。

    FLUENT UDF和FLUENT Scheme混合编程源程序

    在FLUENT软件中,UDF(User Defined Functions)和Scheme编程是两种强大的工具,用于扩展其内置功能,解决复杂的流体动力学问题。本主题主要关注如何利用这两种技术进行混合编程,以模拟蓄热式熔铝炉的工作过程,包括...

    scheme实现的九宫格问题

    以二维list格式输入九宫格问题,用scheme函数式程序设计语言求解,对于多个解的九宫格,可以得到所有的解

    抓取scheme协议.js

    抓取scheme协议.js

    learn scheme

    - **实践项目**:通过实际编写代码解决具体问题来加深理解。 - **社区参与**:加入Scheme编程社区,与其他开发者交流经验。 - **书籍推荐**:除了《Simply Scheme》之外,《Structure and Interpretation of ...

    Scheme语言基础教程

    - **设计**:设计是创造艺术的核心,涉及到如何有效地解决问题和构建程序。 - **抽象**:找到共同之处并忽略不必要的细节是抽象的关键。在编程中,这通常意味着通过定义通用的接口来处理复杂的数据结构或算法。 - **...

    Yet Scheme Another Tutorial中译版

    YSAT教程可能会涵盖如何高效地使用Scheme解决问题,包括优化算法、利用高阶函数和宏、以及编写清晰可读的函数式代码。 **环境与过程** 在Scheme中,过程是具有局部作用域的函数,而环境则是存储变量及其值的结构。...

    Fluent Scheme中文手册修订.docx

    Fluent Scheme 是一种基于 Scheme 语言的编程环境,旨在提供一个高效、灵活的解决方案 для scientific computing 和数据分析。以下是 Fluent Scheme 中文手册修订的知识点摘要: 1. Fluent Scheme 简介 Fluent ...

    Scheme学习资料

    在Scheme中,函数可以调用自身,这种能力使得解决复杂问题变得简洁且易于理解。学习Scheme时,你需要理解如何设计和使用递归函数,以及如何处理递归的终止条件。 其次,Scheme采用了一种叫做“读-求值-打印循环”...

    Scheme跳转的demo

    在Android应用开发中,"Scheme跳转"是一种重要的交互方式,允许不同的应用程序之间进行通信和数据交换。"Scheme"在Android系统中扮演着URL协议的角色,类似于网页浏览器中的http或https,但它是专为Android应用设计...

    URl Scheme的使用以及回调

    URL Scheme是一种在应用程序之间建立通信桥梁的技术,它允许一个应用通过特定的协议(即自定义的URL模式)启动另一个应用,并传递数据。在iOS和Android等操作系统中,开发者可以利用URL Scheme实现应用间的深度链接...

    Lisp语言教程(Scheme)

    - **简洁性**:Scheme语言以其简洁著称,允许程序员将更多的精力集中在解决实际问题上,而不是语言本身。 - **灵活性**:Scheme不仅可以用作脚本语言,还可以作为应用程序的扩展语言。 - **元语言特性**:Scheme...

    抖音快手URL Scheme

    抖音快手URL Scheme 里面包含了抖音快手,进入直播间,进入用户,hone,等 手机中的APP都有一个沙盒,APP就是一个信息孤岛,相互是不可以进行通信的。但是iOS的APP可以注册自己的URL Scheme,URL Scheme是为方便app...

    Scheme语言

    - **递归(Recursion)**:由于函数式编程的特点,递归在Scheme中扮演着重要角色,用于解决问题和定义复杂数据结构。 - **模式匹配(Pattern Matching)**:虽然Scheme标准并不直接支持模式匹配,但许多实现提供了...

    The Scheme Programming Language

    书中还探讨了Scheme语言的深层次应用,例如语法扩展(Syntactic Extension)的概念,这允许程序员定义新的语法形式,以更接近问题领域的方式编写程序。还有对象操作中的各个特定数据类型的详细介绍和处理方法,这些...

    Fluent中的Scheme

    合理管理变量有助于避免命名冲突等问题。 - **列表(Lists)**:列表是Scheme中非常重要的数据结构之一,可用于存储多个值。列表操作是Scheme的一个强大特性,可以通过多种方式创建、修改和遍历列表。 - **条件语句(if...

Global site tag (gtag.js) - Google Analytics