2008. 7. 31.

연습문제 2.60

element-of-set? 은 변함이 없다.

(define (element-of-set? x set)
  (cond ((null? set) #f)
        ((= x (car set)) #t)
        (else (element-of-set? x (cdr set)))))

adjoin-set의 경우 x가 set안에 있는지 더이상 검사하지 않아도 된다.

(define (adjoin-set x set)
  (cons x set))

union-set 역시 마찬가지로 두 set을 그냥 합치면 된다.

(define (union-set set1 set2)
  (append set1 set2))

intersection-set은 기존의 버전과 동일하다.

(define (intersection-set set1 set2)
    (cond ((or (null? set1) (null? set2)) '())
        ((element-of-set? (car set1) set2)
         (adjoin-set (car set1) (intersection-set (cdr set1) set2)))
        (else
         (intersection-set (cdr set1) set2))))
이를 보면 adjoin-set은 O(1)을 따르며 union-set은 O(n)을 따르게된다.
따라서 adjoin-set과 union-set을 많이 사용하는 프로그램에서 더 효율이 높아질 수 있게된다.

댓글 없음:

댓글 쓰기