给定一阶关系组合两个堆
Combine Two Heaps Given a First Order Relation
我要做的事情:
定义一个 SCHEME 过程,命名为 (combine f Ha Hb),它接受三个参数 f,一个用于对堆中的元素进行排序的一阶关系,以及两个堆结构 Ha 和 Hb,
它们是使用相同的一阶关系构建的。
测试用例示例:
( define Ha ( heap-insert-list > ( list 9 5 7 3) ( list )))
( define Hb ( heap-insert-list > ( list 2 8 4 6) ( list )))
( combine > Ha Hb )
(9 (7 () (5 () (3 () ()))) (8 (4 () ()) (6 () (2 () ()))))
我的代码:
(define (create-heap v H1 H2)
(list v H1 H2))
(define (h-min H) (car H))
(define (left heap)
(cadr heap))
(define (right heap)
(caddr heap))
(define (combine f Ha Hb)
(cond ((null? Ha) Hb)
((null? Hb) Ha)
((< (h-min Ha) (h-min Hb))
(create-heap (h-min Ha)
Hb
(combine (left Ha) (right Ha))))
(else
(create-heap (h-min Hb)
Ha
(combine (left Hb) (right Hb)) Ha))))
我的代码正在做一些正确的事情,因为我的测试用例达到了 50%,但它并没有完全通过它们。
好吧,对于初学者来说,您没有使用 f
程序!这个:
((< (h-min Ha) (h-min Hb))
...很可能应该是这样的:
((f (h-min Ha) (h-min Hb))
另外,你在调用递归时忘记传递f
参数:
(combine f (left Ha) (right Ha))
我要做的事情:
定义一个 SCHEME 过程,命名为 (combine f Ha Hb),它接受三个参数 f,一个用于对堆中的元素进行排序的一阶关系,以及两个堆结构 Ha 和 Hb, 它们是使用相同的一阶关系构建的。
测试用例示例:
( define Ha ( heap-insert-list > ( list 9 5 7 3) ( list )))
( define Hb ( heap-insert-list > ( list 2 8 4 6) ( list )))
( combine > Ha Hb )
(9 (7 () (5 () (3 () ()))) (8 (4 () ()) (6 () (2 () ()))))
我的代码:
(define (create-heap v H1 H2)
(list v H1 H2))
(define (h-min H) (car H))
(define (left heap)
(cadr heap))
(define (right heap)
(caddr heap))
(define (combine f Ha Hb)
(cond ((null? Ha) Hb)
((null? Hb) Ha)
((< (h-min Ha) (h-min Hb))
(create-heap (h-min Ha)
Hb
(combine (left Ha) (right Ha))))
(else
(create-heap (h-min Hb)
Ha
(combine (left Hb) (right Hb)) Ha))))
我的代码正在做一些正确的事情,因为我的测试用例达到了 50%,但它并没有完全通过它们。
好吧,对于初学者来说,您没有使用 f
程序!这个:
((< (h-min Ha) (h-min Hb))
...很可能应该是这样的:
((f (h-min Ha) (h-min Hb))
另外,你在调用递归时忘记传递f
参数:
(combine f (left Ha) (right Ha))