목록의 숫자 파티션을 나타내야합니다. 또한이 절차는 최대 파티션 수와 초기 파티션의 최대 값을 결정하는 인수를 사용합니다.구성표에 숫자의 파티션을 나열하십시오.
(list-partitions 5 2 4)
>((4 1) (3 2))
여기서 초기 총, 내가 구성하는 도우미 함수로 분할 수를 공급한다고 생각 파티션의 최대 수는 2이고, 최대 초기 파티션 개념적 4.
이다 5 나를위한 파티션. 하지만 어떻게 구현할 수 있을까요?
는
목록의 숫자 파티션을 나타내야합니다. 또한이 절차는 최대 파티션 수와 초기 파티션의 최대 값을 결정하는 인수를 사용합니다.구성표에 숫자의 파티션을 나열하십시오.
(list-partitions 5 2 4)
>((4 1) (3 2))
여기서 초기 총, 내가 구성하는 도우미 함수로 분할 수를 공급한다고 생각 파티션의 최대 수는 2이고, 최대 초기 파티션 개념적 4.
이다 5 나를위한 파티션. 하지만 어떻게 구현할 수 있을까요?
는
여기 라켓 가능한 해결책 해결. 먼저 partition
절차 (this 알고리즘 기반)는 정수 n
에 대한 전체 파티션 목록을 생성합니다. 그런 다음 list-partitions
절차는 요청에 따라 결과를 필터링 :
#lang racket
(define (partition n)
(let loop ((n n)
(acc '()))
(if (zero? n)
(list acc)
(append-map (lambda (i)
(loop (- n i) (cons i acc)))
(reverse (build-list n add1))))))
(define (list-partitions n max-number max-init)
(take (filter (lambda (lst)
(<= (apply max lst) max-init))
(partition n))
max-number))
(list-partitions 5 2 4)
> '((1 4) (2 3))
고마워! 우리가 Scheme을 사용하고 있기 때문에 당신의 솔루션을 사용하지는 않았지만, 저에게 누산기를 사용하는 아이디어를주었습니다. –
@ Jonk Great !. 어떤 체계적인 통역관을 사용하고 있습니까? 왜냐하면 Racket _is_ Scheme 인터프리터 –
Stk (http://kaolin.essi.fr/STk/)를 사용하기 때문입니다. 이렇게 많은 다른 제도 번역가가 있다는 것을 나는 전혀 몰랐다. –
가 내가 그들을 계산에서 다수의 파티션을 찾기 위해 프로그램을 만들었다. 내 편집을 참조하십시오. –