Sunday, March 22, 2009

  • Bucket sort
Image:



Definition:

It is also called bin sort
.
It is a sorting algorithm that works by partitioning it into a number of buckets. Each bucket is then sorted individually using the different sorting algorithm, or by recursively applying the bucket sorting algorithm.

Bucket sort works as follows:

  1. Set up an array of initially empty "buckets."
  2. Scatter: Go over the original array, putting each object in its bucket.
  3. Sort each non-empty bucket.
  4. Gather: Visit the buckets in order and put all elements back into the original array.
Run-time Complexity Analysis:
♥ efficient and effective in sorting the list.

Codes:
function bucket-sort(array, n) is
buckets ← new array of n empty lists
for i = 0 to (length(array)-1) do
insert array[i] into buckets[msbits(array[i], k)]
for i = 0 to n - 1 do
next-sort(buckets[i])
return the concatenation of buckets[0], ..., buckets[n-1]

Application:
♥ Given an array, put the array of numbers in a bucket where they must be placed then sort the list.

Reference:


  • Quick sort
Definition:

It is a well-known sorting algorithm developed by C.A.H Hoare.

It is a divide and conquer algorithm. It relies on a partition operation: to partition an array, we choose an element, called a pivot, move all smaller elements before the pivot, and move all greater elements after it. This can be done efficiently in linear time andin-place We then recursively sort the lesser and greater sublists.

Run-time Complexity Analysis:

♥ this is performed through finding its pivot and sort it.

♥ typically unstable and somewhat complex but among the fastest sorting algorithms.

Codes:

function quicksort(array)
var list less, greater
if length(array) ≤ 1
return array
select and remove a pivot value pivot from array
for each x in array
if x ≤ pivot then append x to less
else append x to greater
return concatenate(quicksort(less), pivot, quicksort(greater))

Application:

♥ finding the pivot of a given example and then sort it.

Reference:

http://en.wikipedia.org/wiki/Quicksort




  • Merge sort

Image:

Definition:
An 0(n log n) comparison-based sorting algorithms.
In most implementations it is
stable, meaning that it preserves the input order of equal elements in the sorted output.
It is an example of the
divide and conquer algorithmic paradigm.
It was invented by
John von Neumann in 1945.
Run-time Complexity Analysis:
Efficient and effective

Code:
function merge_sort(m)
var list left, right, result
if length(m) ≤ 1
return m

// This calculation is for 1-based arrays.
For 0-based, use length(m)/2 - 1.
var middle = length(m) / 2
for each x in m up to middle
add x to left
for each x in m after middle
add x to right
left = merge_sort(left)
right = merge_sort(right)
result = merge(left, right)
return result

Application:
♥ Merging a bundle of something like sticks and other.

Reference:
en.wikipedia.org/wiki/Merge_sort
http://en.wikipedia.org/wiki/Sorting_algorithm#Merge_sort




  • Shell sort


Definition:

Invented by Donald Shell in 1959. It improves upon bubble sort and insertion sort by moving out of order elements more than one position at a time.
It is a sorting algorithm that is a generalization of insertion sort, with two observations:

  • insertion sort is efficient if the input is "almost sorted", and
  • insertion sort is typically inefficient because it moves values just one position at a time.
Run-time Complexity Analysis:
♥ This is an effective in terms of the efficiency of the sorted list.

Codes:
input: an array a of length n

inc ← round(n/2)
while inc > 0 do:
for i = inc .. n − 1 do:
temp ← a[i]
j ← i
while j ≥ inc and a[j − inc] > temp do:
a[j] ← a[j − inc]
j ← j − inc
a[j] ← temp
inc ← round(inc / 2.2)

Application:
♥ Sorting the numbers in a certain row.

Reference:
http://en.wikipedia.org/wiki/Sorting_algorithm#Shell_sort
  • Insertion sort

Definition:
It is a simple sorting algorithm, a comparison sort in which the sorted array (or list) is built one entry at a time.
It is a simple sorting algorithm that is relatively efficient for small lists and mostly-sorted lists, and often is used as part of more sophisticated algorithms.
It works by taking elements from the list one by one and inserting them in their correct position into a new sorted list. In arrays, the new list and the remaining elements can share the array's space, but insertion is expensive, requiring shifting all following elements over by one.

Run-time Complexity Analysis:
♥ This is efficient and sequential.

Codes:
insertionSort(array A)
begin
for i := 1 to length[A]-1 do
begin
value := A[i];
j := i-1;
while j ≥ 0 and A[j] > value do
begin
A[j + 1] := A[j];
j := j-1;
end;
A[j+1] := value;
end;
end;

Application:
Most humans when sorting—ordering a deck of cards, for example—use a method that is similar to insertion sort.

Reference:
http://en.wikipedia.org/wiki/Sorting_algorithm#Insertion_sort
  • Heapsort

Definition:
It is a comparison-based sorting algorithm, and is part of the selection sort family. Although somewhat slower in practice on most machines than a good implementation of quicksort.
It is a much more efficient version of selection sort.
It also works by determining the largest (or smallest) element of the list, placing that at the end (or beginning) of the list, then continuing with the rest of the list, but accomplishes this task efficiently by using a data structure called aheap, a special type of binary tree.
Once the data list has been made into a heap, the root node is guaranteed to be the largest element. When it is removed and placed at the end of the list, the heap is rearranged so the largest element remaining moves to the root.

Run-time Complexity Analysis:
♥ It has the advantage of a worst-case Θ(n log n) runtime. It is an in-place algorithm, but is not a stable sort.

Codes:
function heapSort(a, count) is
input: an unordered array a of length count

(first place a in max-heap order)
heapify(a, count)

end := count - 1
while end > 0 do
(swap the root(maximum value) of the heap with the last element of the heap)
swap(a[end], a[0])
(decrease the size of the heap by one so that the previous max value will
stay in its proper placement)
end := end - 1
(put the heap back in max-heap order)
siftDown(a, 0, end)

function heapify(a,count) is
(start is assigned the index in a of the last parent node)
start := (count - 2) / 2

while start ≥ 0 do
(sift down the node at index start to the proper place such that all nodes below
the start index are in heap order)
siftDown(a, start, count-1)
start := start - 1
(after sifting down the root all nodes/elements are in heap order)

function siftDown(a, start, end) is
input: end represents the limit of how far down the heap
to sift.
root := start

while root * 2 + 1 ≤ end do (While the root has at least one child)
child := root * 2 + 1 (root*2+1 points to the left child)
(If the child has a sibling and the child's value is less than its sibling's...)
if child + 1 ≤ end and a[child] < a[child + 1] then
child := child + 1 (... then point to the right child instead)
if a[root] < a[child] then (out of max-heap order)
swap(a[root], a[child])
root := child (repeat to continue sifting down the child now)
else
return

Application:
Comparing the array of numbers in a sorted list.

Reference:
http://en.wikipedia.org/wiki/Sorting_algorithm#Heapsort



  • Bubble sort

Definition:
It is a simple sorting algorithm. It works by repeatedly stepping through the list to be sorted, comparing two items at a time and swapping them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted.
The algorithm gets its name from the way smaller elements "bubble" to the top of the list. Because it only uses comparisons to operate on elements, it is a comparison sort.

Run-time complexity Analysis:
♥ This is observing through the first two elements then swap the lesser to greater.
♥ Bubble sort has worst-case and average complexity both О(n²), where n is the number of items being sorted. There exist many sorting algorithms with the substantially better worst-case or average complexity of O(n log n). Even other О(n²) sorting algorithms, such as insertion sort, tend to have better performance than bubble sort. Therefore bubble sort is not a practical sorting algorithm when n is large.

Codes:
procedure bubbleSort( A : list of sortable items ) defined as:
do
swapped := false
for each i in 0 to length(A) - 2 inclusive do:
if A[ i ] > A[ i + 1 ] then
swap( A[ i ], A[ i + 1 ] )
swapped := true
end if
end for
while swapped
end procedure

Application:
♥ For example, swapping the height of the participants of the running event.

Reference:
http://en.wikipedia.org/wiki/Bubble_sort

Thursday, March 12, 2009

Code Implementation of Queue

/* Programmer’s name: Marjorie Egot
Name of Program: Queue implementation
Date Started: March 9, 2009
Date Finished : March 12, 2009
Instructor : Mr. Dony Dongiapon
Course: IT 123: Data Structures
Objective: To be able to make a program that implements a queue data structure in a linked list
*/



Concept: List of Barangay Councilor Officials

//declaration of a constructor
class Queue{
public int positionnum;
public String firstname;
public String lastname;
public char middlename;
public Queue next;

public Queue (int Pnum, String Fname String Lname char M, )
{

positionnum=Pnum;
firstname=Fname;
lastname=Lname;
middlename=M;
}


//displaying the elements on the queue
public void displayQueue()
{
System.out.print(positionnum +” “ + firstname +” “ +” “middlename+ “ “ +: + lastname)
}
}


/*a separate class which has the methods to be used by the queue implemented in a linked list*/
class QueueList
private Queue first;
private Queue last;
public QueueList()
{
first=null;
last=null;
}


//checking if the queue has elements
public Boolean isEmpty()
{
return (first==null);
}



//inserting an element on the queue
public void Enqueue(int Pnum, String Fname String Lname char M, )

{
Queue newQueue= new Queue (int Pnum, String Fname String Lname char M, )

if( isEmpty())
last = newQueue;
newQueue.next=first;
first=newQueue;
}


//deleting an element on the queue
public void Dequeue (int Pnum)
{
Queue newQueue=new Queue (int Pnum, String Fname String Lname char M, )

int temp=first.entrynum;
if (first.next==null)
last=null;
first=first.next;
return temp



}
}

public class MainClass {
public static void main(String[] args) {
LinkQueue theQueue = new LinkQueue();
theQueue.enqueue(1, “Marjorie”, “Egot”, ‘T’ )

theQueue.enqueue(2, “Chrisdyll”, “Pellejo”, ‘P’)
System.out.println(theQueue);

theQueue.enqueue(3, “Julie”, “Pabio”, ‘L’)
System.out.println(theQueue)



theQueue.dequeue(3);

System.out.println(theQueue);



System.out.println(theQueue);
}
}

Sunday, February 15, 2009

Stack (Code Implementation)

/* Programmer: Marjorie T. Egot
Program name: A Stack code Implementation
Purpose: To implement a stack data stucture
Instructor: Dony Dongiapon
Subject: IT123 Data Structures
*/

//a class which declares the variables and the constructors
class Link{
public int iData=0;


public Link(int iData, )
{
iData=id;

}

public void displayLink()
{
System.out.println(iData+":" );
}
}

//the class which contains the methods or the operations on the stack
class StackList{
private Link first;

public StackList(){
first=null;

}

public boolean isEmpty() { //checking if the list is empty or not
return (first == null);
}

public void insertFirst( int id) { //insertion operation
Link newLink = new Link( id);
newLink.next = first;
first = newLink;
}

public Link deleteFirst() //deletion operation
{
Link temp=first;
return temp;
}

public Link pick() //determining the top of the list but doing nothing with it
{
Link temp=first;
return temp;
}

public void displayList //display the data
{
System.out.print("Elements on the stack: ");
Link temp=first;
while(temp!=null)
{
temp.displayList();
}

System.out.println(" ");
}
}

//the main class which applies the methods on the stack
class StackListApp
{
public static void main (String[]args)
{
StackList theList=new StackList();

theList.insertFirst(12);
theList.insertFirst(25);
theList.insertFirst(91);

//when deleting
//just erase the comment if you want to run the method of deletion
theList.deleteFirst();

//when displaying the element
theList.displayList();
}
}
Doubly Linked List
February 16, 2009

Concept/Definition:

A more sophisticated kind of linked list is a doubly-linked list or two-way linked list. Each node has two links: one points to the previous node, or points to a null value or empty list if it is the first node; and one points to the next, or points to a null value or empty list if it is the final node.
[wiki]
♥ As what I have learned, you can access the link before or after a node since they are connected with each other. You have the previous and the next links which are its feature. It's complicated since you have to deal with the 4 pointers.

Illustration:

This is taken from the given example of our instructor.


Code Implementation:

/* Programmer: Marjorie T. Egot
Program name: A Doubly Linked List
Purpose: To implement a doubly linked list.
Instructor: Dony Dongiapon
Subject: IT123 Data Structure */

//constructor
class Link
{
public int iData; //data item
public Link next; //next link in the list
public Link previous; //previous link in the list
public Link(int id)
{
iData = id;
}

//display the elements in the list
public void displayList()
{
return "{" + iData + "} ";
}
}

//another class which contains the methods
class DoublyLinkedList
{
private Link first;
private Link last;

public DoublyLinkedList()
{
first = null;
last = null;
}

public boolean isEmpty()
{
return first == null;
}

public void insertFirst(int dd)
{
Link newLink = new Link(dd);

if (isEmpty())
{
last = newLink;
}else{
first.previous = newLink;
}
newLink.next = first;
first = newLink;
}

public void insertLast(int dd)
{
Link newLink = new Link(dd);
if (isEmpty())
{
first = newLink;
}else{
last.next = newLink;
newLink.previous = last;
}
last = newLink;
}

public Link deleteFirst()
{
Link temp = first;
if(first.next == null)
{
last = null;
}else{
first.next.previous = null;
}
first = first.next;
return temp;
}

public Link deleteLast()
{
Link temp = last;
if(first.next == null)
{
first = null;
}else{
last.previous.next = null;
}
last = last.previous;
return temp;
}

public boolean insertAfter(int key, int dd)
{
Link current = first;
while (current.iData != key)
{
current = current.next;
if (current == null)
{
return false;
}
}
Link newLink = new Link(dd);
if (current == last)
{
newLink.next = null;
last = newLink;
}else{
newLink.next = current.next;
current.next.previous = newLink;
}
newLink.previous = current;
current.next = newLink;
return true;
}

public Link deleteKey(int key)
{
Link current = first;
while (current.iData != key)
{
current = current.next;
if (current == null)
return null;
}
if (current == first)
{
first = current.next;
}else{
current.previous.next = current.next;
}
if (current == last)
{
last = current.previous;
}else{
current.next.previous = current.previous;
}
return current;
}
}

// the main method
public class DoublyLinkedApp
{
public static void main(String[] args)
{
DoublyLinkedList theList = new DoublyLinkedList();

theList.insertFirst(22);
theList.insertFirst(44);
theList.insertFirst(66);
theList.insertLast(11);
theList.insertLast(33);
theList.insertLast(55);

System.out.println(theList);

theList.deleteFirst();
theList.deleteLast();
theList.deleteKey(11);
System.out.println(theList);

theList.insertAfter(22, 77);
theList.insertAfter(33, 88);
System.out.println(theList);
}
}

References:

Tuesday, February 10, 2009

Doubly-ended Code Implementation :

/* Program name: A Double Ended List
Programmer: Marjorie T. Egot
Purpose: To implement a double ended linked list.
Instructor: Dony Dongiapon
Subject: IT123 Data Structures */

//a class that contains the constructor
class Link
{
public int iData;
public double dData:
public Link next;

public Link(int id,double dd)
{
iData = id;
dData=dd;
}

//displays the elements in the list
public void displayLink()
{
System.out.print("{"+iData+","dData+"}");
}
}


//a class which contains the methods

class DoubleEndList
{
private Link first;
private Link last;


public DoubleEndList()
{
first = null;
last = null;
}

//this is to test if there are elements in the list
public boolean isEmpty()
{
return (first == null);
}


//inserting a node in the list to become the first element
public void insertFirst(int id,double dd)
{
Link newLink = new Link(id,dd);

if (isEmpty ())
last = newLink;
newLink.next = first;

first = newLink;
}

//inserting a node on the last
public void insertLast(int id,double dd)
{
Link newLink = new Link(id,dd);
if (isEmpty())
first = newLink;
else
last.next = newLink;
last = newLink;
}

//deletes the first node of the list
public Link deleteFirst(int id,double dd)
{
int temp = first.iData;
if (first.next == null)
last = null;
first = first.next;
return temp;
}

//deletes the last node of the list
public Link deleteLast(int id, double dd)
{
int temp=last.iData;
if(last.next==null)
first=null;
last=last.next;
return temp;
}

//displays the elements of the list
public void displayList()
{
System.out.print("List(first-->Last);");
Link current=first;
while(current!=null)
{
current.displayLink();
current=current.next;
}
}
System.out.println(" ");
}



/* the main class or the application of the program.*/

public class DoubleEndApp
{
public static void main(String[] args)
{

DoubleEndList theList = new DoubleEndList();

//apply the insertion methods on the first and the last node
theList.insertFirst(12,2.55);
theList.insertFirst(21,4.55);
theList.insertFirst(67,8.99);
theList.insertLast(18,9.99);
theList.insertLast(43,3.33);
theList.insertLast(34,5.66);

//displays the elements of the list
System.out.println(theList);

//apply the deletion method on the first and last element of the list
theList.deleteFirst();
theList.deleteLast();
System.out.println(theList);
}
}

Sunday, February 8, 2009

Double-ended Linked List
February 9, 2009

Illustration:

This is taken from the given example of our instructor.

◘ Input:

♥ To fully understand the double-ended linked lists, be sure that you were able to learn the singly linked lists so that it would be easy for you to implement it. Once the node wasn't connected to the other node, the access will be lost and the java garbage collector will automatically get it. It wouldn't be retrieved again.

Definition:

○ What is a double-ended linked list?

♥ It allows for insertions in the front or in the back of the list. Each type of link list will build off of the previous one. First we'll examine the singly linked list before moving onto the double-ended and doubly linked lists. [safari books]

Reference:

Saturday, February 7, 2009

Things Learned...

STACK
February 7, 2009
7:45 pm

Illustration:

This is an illustration that applied the principle of stack. [Surfdoggy.com]

Definition:

♥ Stack is based on the principle of Last In First Out (LIFO).
♥ It is an abstract data type and data structure.
♥ It is a container of nodes wherein different operations are implemented such as "pop" to get an object out of the stack and "push" to enter an object.
♥ Another helper operations are "top" to identify what is on the top of the stack and "null or isEmpty" to know if there is an object in the stack.
♥ The contents of the stack are hidden.
♥ The top of the stack is visible and accessible to the user, others remain hidden.
♥ As new objects are added, each new object becomes the top of the stack, hiding each object below, pushing the others down. As the top object is removed from the stack, they can be used, the objects pop back up, and the second object becomes the top of the stack.
[WIKI]

Reference: