F453 Computing Searches. Binary Trees Not this kind of tree!

14
F453 Computing Searches

Transcript of F453 Computing Searches. Binary Trees Not this kind of tree!

F453 Computing

Searches

Binary Trees

Not this kind of tree!

A binary tree is made up of:

• A Root Node

• Parent Nodes

• Child Nodes (called ‘left’ and ‘right’)

These binary trees are used to define Binary Searches and Binary Heaps.

The major advantage of using this type of structure is that the search algorithms are particularly efficient.

Binary Trees

Look at the Towers of Hanoi as an example of recursion:

• Start with x number of discs & three pegs (A, B & C)

• Every disk with the same parity always moves through the same pattern

• If a disk has odd parity, it moves A->B->C

• If a disk has even parity, it moves A->C->B

• Then through a process of iteration, we move the smallest disk that we can that wasn’t shifted in the previous iteration.

Recursion

In an ordinary binary tree, you have three iterative procedures that can be used:

Binary Search

Preorder traversal sequence: F, B, A, D, C, E, G, I, H (root, left, right)

Inorder traversal sequence: A, B, C, D, E, F, G, H, I (left, root, right); note how this produces a sorted sequence

Postorder traversal sequence: A, C, E, D, B, H, I, G, F (left, right, root)

The binary tree holds data in the logical order that it was inserted into the tree.

So… if we were looking for Fred.

Search

Basil

We start at the rootIf the root is not equal to the search:We compare the terms – look left for lesser values and right for higher valuesWe iterate through the tree until the value is found.

Fred

Andy Neil

Tina

The term insertion is used to add a new term to the binary tree. It begins in a similar way to searching.

So… if we were going to add the term ‘Evie’

Insertion

Basil

We start at the rootIf the root is not equal to the term:We compare the terms – look left for lesser values and right for higher valuesWe iterate through the tree until a node is found which relates to our new term.

Fred

Andy Neil

TinaEvie

Deleting a leaf (a node with no children)

- Just delete it –it has no effect on others

Deleting a node with one child

- Delete it and replace it with its child

Deleting a node with two children

The node is replaced with its in-order successor (left-most leaf)

Confused? Try this animated version: http://www.cs.jhu.edu/~goodrich/dsa/trees/btree.html

Rules of Deletion

F453 Computing

Sorting

Think of a pack of cards.

- Pick up a card from the pack

- look at each card in turn

- then place it in its correct place.

Insertion Sort

Quick Sort is robust and efficient, using the ‘divide and conquer’ method

quicksort( void *a, int low, int high ) {

int pivot;

/* Termination condition! */

if ( high > low )

{

pivot = partition( a, low, high );

quicksort( a, low, pivot-1 );

quicksort( a, pivot+1, high );

}

}

Excellent resource: http://www.cs.auckland.ac.nz/software/AlgAnim/qsort.html

Quick Sort

Quick Sort – In dance

http://www.c0t0d0s0.org/archives/7410-Dance-the-quicksort.html

Bubble Sort is robust but not as memory efficient

#define SWAP(a,b) {

int t; t=a; a=b; b=t;

}

void bubble( int a[], int n )

/* Pre-condition: a contains n items to be sorted */

{ int i, j;

/* Make n passes through the array */ for(i=0;i<n;i++) { /* From the first element to the end of the unsorted section */ for(j=1;j<(n-i);j++) { /* If adjacent items are out of order, swap them */ if( a[j-1]>a[j] ) SWAP(a[j-1],a[j]); } } }

Excellent resource: http://www.cs.auckland.ac.nz/software/AlgAnim/qsort.html

Bubble Sort

Quick Sort vs Bubble Sort

http://www.youtube.com/watch?v=vxENKlcs2Tw