180 likes | 187 Views
Explore binary trees, sets, functions, and implementations in computer programming. Learn about data definition, invariants, efficiency, and templates. Understand how to operate on binary search trees and sets efficiently.
E N D
Data Abstraction: SetsBinary Search Trees CMSC 11500 Introduction to Computer Programming October 30, 2002
Roadmap • Recap: Binary Trees • Data abstraction:Sets • Objects as functions:Member-of?, Adjoin, Intersection • Implementations: Binary Search Trees • Data Definition • Invariants • Template • Functions • Analysis & Efficiency • Summary
Recap: Binary Trees • Binary trees: • (Multiply) self-referential structures • Data Definition -> Template -> Function • (define-struct bt (val left right)) • Where val: number; left, right: binary-tree • A binary-tree: 1) ‘unknown, • 2) (make-bt val left right) • (define (fn-for-bt abt) • (cond ((eq? abt #f)…) • ((bt? abt) • (cond (…(bt-val abt)…) ….(fn-for-bt (bt-left abt))… ….(fn-for-bt (bt-right abt))…
Data Abstraction: Sets • Set: collection of objects • Defined by operations that can be performed • Set operations: • Element-of?, Adjoin, Union, Intersection, Set difference • Many possible concrete implementations • Unordered lists • Ordered lists • Binary trees • Binary search trees
Data Definition Binary search tree (bst) is • #f or, • (make-bt val left right) • Where val: number; left, right: bst • (define-struct bt (val left right)) • Invariant: • For a node n, the bt-val’s of all nodes in (bt-left n) are less than (bt-val n) and all node values in (bt-right n) are greater.
Data Invariants • “invariant”: if it is true of the input, must be true of the output • Invariant must be maintained by all functions that operate on the type • E.g. adjoin: new element must be >= anything to its left, < than anything to its right
Template (define (fn-for-bst abst) (cond ((eq? abst #f)..) ((bt? abst) (cond (( …bt-val abst)…) …(fn-for-bst (bt-left abst)).. …(fn-for-bst (ft-right abst))…
Sets as Binary Search Trees • {3,5,6,7,9,11,13} • Balanced: same # nodes in left & right • Unbalanced: anything else 7 5 11 3 6 9 13
Element-of? • Contract: • ;; element-of?: number bst -> boolean • Purpose: • ;; To determine if element is in set
Element-of? (define (element-of? num abst) (cond ((eq? abst #f) #f) ((bt? abst) (cond ((= num (bt-val abst)) #t) ((< num (bt-val abst)) (element-of? num (bt-left abst))) ((> num (bt-val abst)) (element-of? num (bt-right abst)))))
Adjoin • Contract: • ;; adjoin: number bst -> bst • Purpose • ;; To create a new set with members of original set and new element
Adjoin: BST (define (adjoin x abst) (cond ((null? abst) (make-bt x #f #f) ((= x (bt-val abst)) abst) ((< x (bt-val abst)) (make-bt (bt-val abst) (adjoin x (bt-left abst)) (bt-right abst))) ((> x (bt-val abst)) (make-bt (bt-val abst) (bt-left abst) (adjoin x (bt-right abst))))
Intersection: BST • Contract: • ;;intersection: bst bst -> bst • Purpose: • ;;To build a set including items found in both sets
Intersection (define (intersection bst1 bst2) (intersect-iter bst1 bst2 #f) (define (intersect-iter bst1 bst2 bst-new) (cond ((or (not bst1)(not bst2)) bst-new) ((element-of? (bt-val bst2) bst1) (intersect-iter (bt-right bst2) bst1 (intersect-iter (bt-left bst2) bst1 (adjoin (bt-val bst2) bst-new) (else (intersect-iter (bt-right bst2) bst1 (intersect-iter (bt-left bst2) bst1 bst-new)
BST Sets • Analysis: • If balanced tree • Each branch reduces tree size by half Successive halving -> O(log n) growth • Element-of?: O(log n) • Adjoin: O(log n)
Summary • Data objects • Defined by operations done on them • Abstraction: • Many possible implementations of operations • All adhere to same contract, purpose • Different implications for efficiency
Alternative: Ordered Lists • Set-of-numbers: • 1) ‘() • 2) (cons n set-of-numbers) • Where n is a number, and n <= all numbers in son • Maintain constraint: • Anywhere add element to set
Adjoin (define (adjoin x set) (cond ((null? set) (cons x ‘()) ((eq? (car set) x) set) ((< x (car set)) (cons x set)) (else (cons (car set) (adjoin x (cdr set)))))) Note: New invariant adds condition Order of Growth: On average, check half