Tuesday, September 7, 2010

Graph Traversal - Depth First Search

Depth First Search is used to perform traversal of a graph. In this method, all the vertices are stored in a Stack and each vertex of the graph is visited or explored once. The newest vertex (added last) in the Stack is explored first. To traverse the graph, Adjacent List of a graph is created first.

EXAMPLE
For Example : Consider the following Graph

The Adjacent List is
11 -> 12,18,13
12-> 11,14,15
13-> 11,16,17
14-> 12,18
15-> 12,18
16-> 13,18
17-> 13,18
18-> 14,15,11,16,17



Let us suppose that starting node is 11, The steps to traverse graph using Depth First Search is
Step 1: Push 11 onto the Stack
Stack: 11

Step 2:  Pop the top element i.e. last added (11) from the stack and push all adjacent vertex of popped vertex onto the stack that are not visited.
Stack:  12,18,13

Step 3:  Pop the top element i.e. last added (13) from the stack and push all adjacent vertex of popped vertex onto the stack that are not visited.
Stack: 12,18,16,17
11 not added becoz already visited; i.e. onto stack or deleted

Step 4:  Pop the top element i.e. last added (17) from the stack and push all adjacent vertex of popped vertex onto the stack that are not visited.
Stack: 12,18,16
13 and 18 not added becoz already visited; i.e. onto stack or deleted

Step 5:  Pop the top element i.e. last added (16) from the stack and push all adjacent vertex of popped vertex onto the stack that are not visited.
Stack: 12,18
13 and 18 not added becoz already visited; i.e. onto stack or deleted

Step 6:  Pop the top element i.e. last added (18) from the stack and push all adjacent vertex of popped vertex onto the stack that are not visited.
Stack: 12,14,15
11,16 and 17 not added becoz already visited; i.e. onto stack or deleted
 
Step 7:  Pop the top element i.e. last added (15) from the stack and push all adjacent vertex of popped vertex onto the stack that are not visited.
Stack: 12,14
12 and 18  not added becoz already visited; i.e. onto stack or deleted

Step 8:  Pop the top element i.e. last added (14) from the stack and push all adjacent vertex of popped vertex onto the stack that are not visited.
Stack: 12
12 and 18  not added becoz already visited; i.e. onto stack or deleted
 
Step 9:  Pop the top element i.e. last added (12) from the stack and push all adjacent vertex of popped vertex onto the stack that are not visited.
Stack: ----
11, 14 and 15  not added becoz already visited; i.e. onto stack or deleted

Stack Empty. Therefore the Depth First Search is  11,13,17,16,18, 15,14,12

METHOD

Step 1: Intialise all the vertices.
Step 2: Push starting vertex onto the Stack.
Step 3: Repeat step 4 and 5 until Stack is empty.
Step 4: Pop the top vertex from the Stack.
Step 5: Push onto stack all the neighbours of Popped vertex
Step 6: Exit

ALGORITHM

Step 1: currentNode=startNode
Step 2: visited[startNode]=1
Step 3: Repeat
             { for all vertex w adjacent from currentNode
                 {      if (visited[w]==0)
                                { PUSH(w)
                                visited[w]=1
                                }
                 }
           If Q is empty then return
                Else  POP(currentNode)

         }

Graph - Minimum Spanning Tree

DEFINITION 

Let G=(V,E,W) be any weighted graph. Then a spanning tree whose cost is minimum is called minimum spanning tree. The cost of the spanning tree is defined as the sum of the costs of the edges in that tree.

The two method's used are
1. Prim's Algorithm
2. Kruskal's Algorithm

Monday, August 9, 2010

Traversing Binary Tree

DEFINITION
Traversing a Binary Tree means processing / visiting all the nodes of a Binary Tree once in a systematic manner. Starting from the root of a binary tree, there are three main methods that can be performed to perform tree traversal. These methods are
  • Inorder Traversal
  • Preorder Traversal
  • Postorder Traversal


TRAVERSAL METHODS

Inorder Traversal 
To traverse a non-empty binary tree in inorder, the following operations are performed recursively
   1. Traverse the left subtree.
   2. Visit the root.
   3. Traverse the right subtree.

Algorithm
For a given binary tree let the address of root node is given by the pointer R. Let LPTR stores address if left child and RPTR stores address of right child. This algorithm recursively traverse the binary tree in  inorder

INORDER(T)
Step 1: Check for empty Tree
             IF R=NULL THEN
                  PRINT ("EMPTY TREE")
                  EXIT
            ENDIF

Step 2: Traverse Left subtree in inorder
            IF LPTR(R) < > NULL THEN
                  CALL INORDER(LPTR(R))
            ENDIF

Step 3: Process the Root
            PRINT (INFO(R))

Step 4: Traverse Right subtree in inorder
             IF RPTR(R) < > NULL THEN
                  CALL INORDER(RPTR(R))
             ENDIF

Step 5: Exit


Preorder Traversal
To traverse a non-empty binary tree in preorder, the following operations are performed recursively 
   1. Visit the root.
   2. Traverse the left subtree.
   3. Traverse the right subtree.

Algorithm
For a given binary tree let the address of root node is given by the pointer R. Let LPTR stores address if left child and RPTR stores address of right child. This algorithm recursively traverse the binary tree in  pre order

PREORDER(T)
Step 1: Check for empty Tree
             IF R< > NULL THEN
                  PRINT INFO(R)
             ELSE
                  PRINT ("EMPTY TREE")
                  EXIT
            ENDIF

Step 2: Traverse Left subtree in preorder

            IF LPTR(R) < > NULL THEN
                  CALL PREORDER(LPTR(R))
            ENDIF

Step 3: Traverse Right subtree in preorder
             IF RPTR(R) < > NULL THEN
                  CALL PREORDER(RPTR(R))
             ENDIF

Step 4: Exit


Postorder Traversal
To traverse a non-empty binary tree in postorder, the following operations are performed recursively 
   1. Traverse the left subtree.
   2. Traverse the right subtree.
   3. Visit the root.

Algorithm
For a given binary tree let the address of root node is given by the pointer R. Let LPTR stores address if left child and RPTR stores address of right child. This algorithm recursively traverse the binary tree in  postorder

POSTORDER(T)
Step 1: Check for empty Tree
             IF R=NULL THEN
                  PRINT ("EMPTY TREE")
                  EXIT
            ENDIF

Step 2: Traverse Left subtree in postorder

            IF LPTR(R) < > NULL THEN
                  CALL POSTORDER(LPTR(R))
            ENDIF

Step 3: Traverse Right subtree in postorder
             IF RPTR(R) < > NULL THEN
                  CALL POSTORDER(RPTR(R))
             ENDIF


Step 4: Process the Root
            PRINT (INFO(R))


Step 5: Exit

Friday, April 10, 2009

Hashing

~~~~~~~~~~~~~~~~~~~~ HASHING ~~~~~~~~~~~~~~~~~~~~

The searching methods Linear Search and Binary Search are based on compariosion of datas. Therefore we need search techniques whose search time is independent of number of elements. Using Hashing, the postion of particular element is determined by value of hash key of that element. 

Hash Table: Hash table is a structure arranged in a form of an array where we store a key value after applying the hash function. Each structure is capable of storing one data only. Therefore time required to locate any element in the hash table is O(1). Each position on a table is known as bucket. H(k) is home bucket for the hash table.

Hash Function: The function that transform the original data into hash data is known as hash function. 
For example: let A is the orginal data having key K and H is the hash function that gives value B, then A is stored in postion H(K); i.e. position B of hash table. 


 The various ways to find hash functions are

1. Division Method: Choose a number m larger than the number of elements, may be last prime number in the range 1 to n . The hash function H is defined by
H(K)=K mod m
For Example: Consider a file  and n=100. Let us suppose m=97 then hash function can be applied to some of the elements as follows
H(3205)=3205 mod 97 =4
H(7148)= 7148 mod 97=67
H(2345)=2345 mod 97=17

Hash Table

K     :   3205     7148     2345 ............
H(K) :     4          67         17  ..............

2. Mid Square Method: In this method, the square of elements is taken and then number of digit extracted from the square as hash data.
For Example: Consider a file of 100 elements then we can apply this method as follows

Hash Table

K      :  3205            7148               2345
K2    : 10272025     51093904      5499025    
H(K) :  72                  93                   99  

3. Folding Method: In this method elements are partitioned into number of parts  each of which has a same length except the last part. These parts are added together and hash value is obtained.
For Example:  Consider the file of 100 elements and each element is to be divided into single digit. This method can be applied as follows

Hash Table

K              :    3205          7148         2345
Parts         :   3,2,0,5      7,1,4,8      2,3,4,5
Sum H(K)  :     10             20             14
 
4. Digit Analysis Method: In this method, hash data is obtained by selecting and shifting digits or bits of the original data. Digits position having most uniform distribution is selected.

5. Length Dependent Method: In this method, the length of the data is used along with some original data position to produce hash key.

Following points must be remembered while using any of the above Hash Function

i. Function should be easy and quick to compute.

ii. There should be no or minimum collision.

To search a data with any key k, we compute first H(K) and see whether that data exists at position H(K) of the tabe. 


 

Friday, March 6, 2009

Merge Sort

 First divide the list into the smallest unit (1 element), then compare each element with the adjacent list to sort and merge the two adjacent lists. Finally all the elements are sorted and merged.


Efficiency
  • Worst case performance     O(n log n)
  • Best case performance   O(n log n)
  • Average case performance     O(n log n)

Insertion Sort Method

This method sorts the data by inserting value into its proper poistion.

The steps used in this method are

Step 1: A1 itself is sorted.

Step 2: Compare A2 with A1
  • In case of ascending order ,  
  A2 <= A1 if yes then x = A2 ; A2 = A1 ; A1 = x
                             if no 'No Change'
  • In case of descending order
    A2 >= A1 if yes then x = A2 ; A2 = A1 ; A1 = x
                             if no 'No Change'


Step 3: Compare A3 with A1 and A2
  • In case of ascending order ,  
  A3 <= A1  or A3<= A2  
  then insert A3 in that postion where the condition holds true (first) , 
          otherwise 'No Change'
  • In case of descending order
   A3 >= A1  or A3>= A2  
  then insert A3 in that postion where the condition holds true (first) , 
          otherwise 'No Change'

.
.
.
.
Step n : Compare An with A1, A2, A3 ... An-1 
  • In case of ascending order ,  
  An <= A1  or An<= A2  or ... An <= An-1 
  then insert An in that postion where the condition holds true (first) , 
          otherwise 'No Change'
  • In case of descending order
    An >= A1  or An>= A2  or ... An >= An-1 
  then insert An in that postion where the condition holds true (first) , 
          otherwise 'No Change'

Complexity 

  • Worst Case : n(n-1)/2 = o(n2)
  • Average Case : n(n-1)/4 = o(n2)

Algorithm

1. For step= 1 to n
    Set temp=a[step]
    Set i=step-1
    while temp=0)
            Set a[i+]=a[i]
    end while
    Set a[i+1]=temp
   End For
2. Print Sorted Data
3. Exit

Thursday, March 5, 2009

Quick Sort Method

Quick Sort Method

Description: 
Also known as Partition Exchange Method because it sorts data by partitioning the the array / list into two sub arrays / lists. Each partition is in turn sorted recursively. In each step, the goal is
to place a particular data known as key in its final position. In general, key element is the first data of an array / list and rest of the data grouped into  such that

i. One partition contains data smaller than the key value.

ii. Another partition contains data larger the key value.

Example:

Consider following elements, the quick sort
method to sort data in ascending order is

44,33,11,55,77,90,40,60,99,22,88,66

Step 1: Key is 44.
The First step is as follows

i. Scan: Right to Left
  • stop when find first number less than key, 44
  • 22
  • Data after interchange: 22,
    33,11,55,77,90,40,60,99,44,88,66

ii. Left to Right
  • stop when find first number greater than key, 44
  • 55
  • Data after interchange:: 22,33,11,44,77,90,40,60,99,55,88,66

iii. Right to Left
  • stop when find first number less than key, 44
  • 40
  • Data after interchange:: 22, 33,11,40,77,90,44,60,99,55,88,66

iii. Left to Right
  • stop when find first number greater than key, 44
  • 77
  • Data after interchange:: 22,33,11,40,44,90,77,60,99,55,88,66

so the list can be partitioned into two sub list

Sub Part 1: 22,33,11,40. 

Sub Part 2: 90,77,60,99,55,88,66.  

Step 2: Repeat
same steps on Sub Part1 with
key as 22

Step 3: Repeat
same steps on Sub Part2 with
key as 99

and so on

Efficiency:
  • Worst Case:: O(n2) 
  • Best case performance    O(n log n)  
  • Average case performance    O(n log n)

Algorithm

Quicksort (int data[],int left,int right) 
{
int mid,tmp,i,j;

i = left;
j = right;
mid = data[(left + right)/2];
do 
{
     while(data[i] < mid)
         i++;
      while(mid < data[j])
         j--;

      if (i <= j) 
     {
            tmp = data[i];
            data[i] = data[j];
            data[j] = tmp;
            i++;
            j--;
     }
} while (i <= j);
   
if (left < j) Quicksort(data,left,j);

if (i < right) Quicksort(data,i,right);

}

Learn Programming online

Started Two months Online Programming Classes for XI, XII (all boards), B.Sc.(CS/IT), BCA, M.Sc.(CS/IT), MCA. Programming Languages 1. C 2. ...