그래서 기본적으로 함수가 있습니까? 그 실행은 O (n^2)에 있습니다. 이것은 매회마다 재귀를하기 때문에 O (n) 함수 인 높이를 호출하기 때문입니다 (n은 트리의 노드 수임).Scheme에서 더 효율적인 런타임 - AVL의
(define (height t)
(cond
[(empty? t) 0]
[else (+ 1 (max (height (BST-left t)) (height (BST-right t))))]))
(define (avl? t)
(cond
[(empty? t) #t]
[else (and (avl? (BST-left t))
(avl? (BST-right t))
(>= 1 (abs (- (height (BST-left t))
(height (BST-right t))))))]))
내 문제는 내가 avl을 만들고 싶습니까? O (n) 시간에 실행하십시오. 나는 힌트를 얻었습니다 : "당신이 적용되는 BST의 크기에 관계없이 일정 시간 내에 높이 함수 호출을 제한하려고 노력해야합니다. 이런 식으로 모든 실행 시간에 O (n)을 얻을 수 있습니다." ... 내 높이를 일정한 시간에 어떻게 달릴 지 잘 모르겠습니다. 내 제안을하기위한 제안? O (n^2)가 아닌 O (n)에서 실행됩니까?
힌트 : 캐싱 ... –
캐싱? 정확히 그게 뭐야? – Thatdude1
정보를 다시 계산하는 것을 피하기 위해 정보를 저장합니다. –