Download presentation
Presentation is loading. Please wait.
1
Data Structures: Trees and Grammars
Readings: Sections 6.1, (more from Ch. 6 later)
2
Continue focus on data structures and algorithms
Goals for this Unit Continue focus on data structures and algorithms Understand concepts of reference-based data structures (e.g. linked lists, binary trees) Some implementation for binary trees Understand usefulness of trees and hierarchies as useful data models Recursion used to define data organization
3
Taxonomy of Data Structures
From the text: Data type: collection of values and operations Compare to Abstract Data Type! Simple data types vs. composite data types Book: Data structures are composite data types Definition: a collection of elements that are some combination of primitive and other composite data types
4
Book’s Classification of Data Structures
Four groupings: Linear Data Structures Hierarchical Graph Sets and Tables When defining these, note an element has: one or more information fields relationships with other elements
5
Note on Our Book and Our Course
Our book’s strategy In Ch. 6, discuss principles of Lists Give an interface, then implement from scratch In Ch. 7, discuss principles of Trees Later, in Ch. 9, see what Java gives us Our course’s strategy We did Ch. 9 first. Saw List interfaces and operations Then, Ch. 8 on maps and sets Now, trees with some implementation too
6
Trees Represent… Concept of a tree very common and important.
Tree terminology: Nodes have one parent A node’s children Leaf nodes: no children Root node: top or start; no parent Data structures that store trees Execution or processing that can be expressed as a tree E.g. method calls as a program runs Searching a maze or puzzle
7
Trees are Important Trees are important for cognition and computation
computer science language processing (human or computer) parse trees knowledge representation (or modeling of the “real world”) E.g. family trees; the Linnaean taxonomy (kingdom, phylum, …, species); etc.
8
Another Tree Example: File System
C:\ lab2 CS216 lab1 lab3 MyMail school CS120 pers list.h calc.cpp list.cpp What about file links (Unix) or shortcuts (Windows)?
9
Another Tree Example: XML and HTML documents
<HEAD>…</HEAD> <BODY> <H1>My Page</H1> <P> Blah <PRE>blah blah</PRE> End </P> </BODY> </HTML> How is this a tree? What are the leaves?
10
Tree Data Structures Why this now? Very useful in coding
TreeMap in Java Collections Framework Example of recursive data structures Methods are recursive algorithms
11
Tree Definitions and Terms
First, general trees vs. binary trees Each node in a binary tree has at most two children General tree definition: Set of nodes T (possibly empty?) with a distinguished node, the root All other nodes form a set of disjoint subtrees Ti each a tree in its own right each connected to the root with an edge Note the recursive definition Each node is the root of a subtree
12
Picture of Tree Definition
And all subtrees are recursively defined as: a node with… subtrees attached to it
13
Tree Terminology A node’s parent A node’s children
Binary tree: left child and right child Sibling nodes Descendants, ancestors A node’s degree (how many children) Leaf nodes or terminal nodes Internal or non-terminal nodes
14
Recursive Data Structure
Recursive Data Structure: a data structure that contains a pointer or reference to an instance of itself: public class TreeNode<T> { T nodeItem; TreeNode<T> left, right; TreeNode<T> parent; … } Recursion is a natural way to express many algorithms. For recursive data-structures, recursive algorithms are a natural choice
15
General Trees Representing general trees is a bit harder
Each node has a list of child nodes Turns out that: Binary trees are simpler and still quite useful From now on, let’s focus on binary-trees only
16
ADT Tree Remember definition on an ADT?
Model of information: we just covered that Operations? See pages in textbook Many are similar to ADT List or any data structure The “CRUD” operations: create, replace, update, delete Important about this list of operations some are in terms of one specified node, e.g. hasParent() others are “tree-wide”, e.g. size(), traversal
17
Classes for Binary Trees (pp. 416-431)
class LinkedBinaryTree (p. 425, bottom) reference to root BinaryTreeNode methods: tree-level operations class BinaryTreeNode (p. 416) data: an object (of some type) left: references root of left-subtree (or null) right: references root of right-subtree (or null) parent: references this node’s parent node Could this be null? When should it be? methods: node-level operations
18
Two-class Strategy for Recursive Data Structures
Common design: use two classes for a Tree or List “Top” class has reference to “first” node other things that apply to the whole data-structure object (e.g. the tree-object) both methods and fields Node class Recursive definitions are here as references to other node objects Also data (of course) Methods defined in this class are recursive
19
Binary Tree and Node Class
LinkedBinaryTree class has: reference to root node reference to a current node, a cursor non-recursive methods like: boolean find(tgt) // see if tgt is in the whole tree Node class has: data, references to left and right subtrees recursive versions of methods like find: boolean find(tgt) // is tgt here or in my subtrees? Note: BinaryTree.find() just calls Node.find() on the root node! Other methods work this way too
20
Why Does This Matter Now?
This illustrates (again) important design ideas The tree itself is what we’re interested in There are tree-level operations on it (“ADT level” operations) The implementation is a recursive data structure There are recursive methods inside the lower-level classes that are closely related (same name!) to the ADT-level operation Principles? abstraction (hiding details), delegation (helper classes, methods)
21
ADT Tree Operations: “Navigation”
Positioning: toRoot(), toParent(), toLeftChild(), toRightChild(), find(Object o) Checking: hasParent(), hasLeftChild(), etc. equals(Object tree2) Book calls this a “deep compare” Do two distinct objects have the same structure and contents?
22
ADT Tree Operations: Mutators
insertRight(Object o), insertLeft(Object o) create a new node containing new data make this new node be the child of the current node Important: We use these to build trees! prune() delete the subtree rooted by the current node
23
Next: Implementation Next (in the book) But for us:
How to implement Java classes for binary trees Class for node, another class for BinTree Interface for both, then two implementations (array and reference) But for us: We’ll skip some of this, particularly the array version We’ll only look at reference-base implementation After that: concept of a binary search tree
24
Understanding Implementations
Let’s review some of the methods on pp (Done in class, looking at code in book.) Some topics discussed: Node class. Parent reference or not? Are two trees equal? Traversal strategies: Section in book visit() method and callback (also 7.3.2)
25
Binary Search Trees We often need collections that store items
Maybe a long series of inserts or deletions We want fast lookup, and often we want to access in sorted order Lists: O(n) lookup Could sort them for O(lg n) lookup Cost to sort is O(n lg n) and we might need to re-sort often as we insert, remove items Solution: search tree
26
Binary Search Trees Associated with each node is a key value that can be compared. Binary search tree property: every node in the left subtree has key whose value is less than the value of the root’s key value, and every node in the right subtree has key whose value is greater than the value of the root’s key value.
27
Example 5 4 8 1 7 11 3 BINARY SEARCH TREE
28
Counterexample 8 5 11 2 7 6 10 18 4 15 20 NOT A BINARY SEARCH TREE 21
29
Find and Insert in BST Find: look for where it should be
If not there, that’s where you insert
30
Recursion and Tree Operations
Recursive code for tree operations is simple, natural, elegant Example: pseudo-code for Node.find() boolean find(Comparable tgt) { Node next = null; if (this.data matches tgt) return true else if (tgt’s data < this.data) next = this.leftChild else // tgt’s data > this.data next = this.rightChild // next points to left or right subtree if (next == null ) return false // no subtree else return next.find(tgt) // search on }
31
Order in BSTs How could we traverse a BST so that the nodes are visited in sorted order? Does one of our traversal strategies work? A very useful property about BSTs Consider Java’s TreeSet and TreeMap A search tree (not a BST, but be one of its better “cousins”) In CS2150: AVL trees, Red-Black trees Guarantee: search times are O(lg n)
32
Deleting from a BST Removing a node requires
Moving its left and right subtrees Not hard if one not there But if both there? Answer: not too tough, but wait for CS2150 to see! In CS2110, we’ll not worry about this
33
Next: Grammars, Trees, Recursion
Languages are governed by a set of rules called a grammar Is a statement legal ? Generate or derive a new legal statement Natural language grammars Language processing by computers But, grammars used a lot in computing Grammar for a programming language Grammar for valid inputs, messages, data, etc.
34
Backus-Naur Form BNF is a widely-used notation for describing the grammar or formal syntax of programming languages or data BNF specifics a grammar as a set of derivation rules of this form: <symbol> ::= <expression with symbols> Look at website and example there (also on next slide) How are trees involved here? Is it recursive?
35
BNF for Postal Address Example: Ann Marie G. Jones
<postal-address> ::= <name-part> <street-address> <zip-part> <personal-part> ::= <first-name> | <initial> "." <name-part> ::= <personal-part> <last-name> [<jr-part>] <EOL> | <personal-part> <name-part> <street-address> ::= [<apt>] <house-num> <street-name> <EOL> <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL> Example: Ann Marie G. Jones 123 Main St. Hooville, VA 22901 Where’s the recursion?
36
Grammars in Language Rule-based grammars describe
how legal statements can be produced how to tell if a statement is legal Study textbook, pp , to see rule-based grammar for simple Java-like arithmetic expressions four rules for expressions, terms, factors, and letter Study how a (possibly) legal statement is parsed to generate a parse tree
37
Computing Parse-Tree Example
Expression: a * b + c
38
Grammar Terms and Concepts
First, this is what’s called a context-free grammar For CS2110, let’s not worry about what this means! (But in CS2102, you learn this.) A CFG has a set of variables (AKA non-terminals) a set of terminal symbols a set of productions a starting symbol
39
Previous Parse Tree Terminal symbols:
<operator> could be: + * <letter> could be: a b c Production: <factor> <letter> | <number>
40
Natural Language Parse Tree
Statement: The man bit the dog
41
How Can We Use Grammars? Parsing Production
Is a given statement a valid statement in the language? (Is the statement recognized by the grammar?) Note this is what the Java compiler does as a first step toward creating an executable form of your program. (Find errors, or build executable.) Production Generate a legal statement for this grammar Demo: generate random statements! See link on website next to slides
42
Demo’s Poem-grammar data file
{ <start> The <object> <verb> tonight } <object> waves big yellow flowers slugs { <verb> sigh <adverb> portend like <object> die <adverb> } <adverb> warily grumpily Note: no recursive productions in this example!
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.