element-of-set? 은 변함이 없다.
adjoin-set의 경우 x가 set안에 있는지 더이상 검사하지 않아도 된다.
union-set 역시 마찬가지로 두 set을 그냥 합치면 된다.
intersection-set은 기존의 버전과 동일하다.
따라서 adjoin-set과 union-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)이를 보면 adjoin-set은 O(1)을 따르며 union-set은 O(n)을 따르게된다.
(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과 union-set을 많이 사용하는 프로그램에서 더 효율이 높아질 수 있게된다.

댓글 없음:
댓글 쓰기