Skip to content

Commit be15adc

Browse files
committed
added huffmann coding
1 parent f92d3e5 commit be15adc

File tree

2 files changed

+196
-0
lines changed

2 files changed

+196
-0
lines changed

greedy/huffman.java

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
package sorting;
2+
3+
/**
4+
* Created by sanjeev on 4/2/17.
5+
*/
6+
public class huffman
7+
{
8+
public static void main(String [] args)
9+
{
10+
System.out.println("Welcome to Huffman");
11+
int [] array = utility.input_for_sorting();
12+
new huffman().get_huffman_codes(array);
13+
//utility.print_array(array);
14+
}
15+
16+
int [] get_huffman_codes(int [] array)
17+
{
18+
int min1,min2,sum;
19+
boolean first = true;
20+
build_min_heap(array);
21+
System.out.println("The min heap is: ");
22+
utility.print_array(array);
23+
min1 = extract_min(array,true);
24+
first = false;
25+
min2 = extract_min(array,first);
26+
sum = min1+min2;
27+
insert(array,sum);
28+
utility.print_array(array);
29+
for(int i =1;i<array.length-1;i++)
30+
{
31+
min1 = extract_min(array,first);
32+
min2 = extract_min(array,first);
33+
sum = min1+min2;
34+
insert(array,sum);
35+
utility.print_array(array);
36+
}
37+
return array;
38+
}
39+
40+
void insert(int [] array, int value)
41+
{
42+
int temp;
43+
int index = array[array.length -1];
44+
index++;
45+
array[index] = value;
46+
array[array.length -1]++;
47+
int parent = index;
48+
while(parent>0)
49+
{
50+
if (index%2==0) parent = (index -2)/2;
51+
else parent = (index-1)/2;
52+
//System.out.println("parent " + parent);
53+
if(array[parent] > array[index])
54+
{
55+
temp = array[parent];
56+
array[parent] = array[index];
57+
array[index] = temp;
58+
index = parent;
59+
}
60+
else break;
61+
}
62+
}
63+
64+
int extract_min(int [] array, boolean first)
65+
{
66+
//System.out.println("PRINTING IN EXTRACT MIN");
67+
int temp = array[0];
68+
if(first)
69+
{
70+
array[0] = array[array.length-1];
71+
array[array.length -1] = array.length -2;
72+
}
73+
else
74+
{
75+
array[0] = array[array[array.length-1]];
76+
// System.out.println(array[array.length-1] + "index prv for min haeaify");
77+
array[array.length-1] --;
78+
//System.out.println(array[array.length-1] + "index for min haeaify");
79+
}
80+
min_heapify(array,0,array[array.length-1]);
81+
return temp;
82+
}
83+
84+
public void min_heapify(int [] array,int i, int j)
85+
{
86+
//System.out.println("incoming value " + i + " " + j);
87+
int min_index ;
88+
int left = 2*i+1;
89+
//System.out.println(left + "left" + (array.length - j));
90+
int right = 2*i+2;
91+
//System.out.println(right + "right" + (array.length - j));
92+
if(left <= j)
93+
{
94+
if(right <= j)
95+
{
96+
if(array[left] < array[right]) min_index = left;
97+
else min_index = right;
98+
if((array[i] < array[min_index])) min_index = i;
99+
}
100+
else
101+
{
102+
if (array[i] > array[left])
103+
min_index = left;
104+
else min_index = i;
105+
}
106+
// System.out.println("values" + min_index + " " + i);
107+
if(min_index!=i)
108+
{
109+
// System.out.println("in the not equal loop");
110+
int temp = array[i];
111+
array[i] = array[min_index];
112+
array[min_index] = temp;
113+
min_heapify(array,min_index,j);
114+
}
115+
}
116+
117+
}
118+
119+
public void min_heapify(int [] array,int i)
120+
{
121+
int min_index ;
122+
int left = 2*i+1;
123+
int right = 2*i+2;
124+
if(left < array.length)
125+
{
126+
if(right < array.length)
127+
{
128+
if(array[left] < array[right]) min_index = left;
129+
else min_index = right;
130+
if((array[i] < array[min_index])) min_index = i;
131+
}
132+
else
133+
{
134+
min_index = left;
135+
}
136+
if(min_index!=i)
137+
{
138+
int temp = array[i];
139+
array[i] = array[min_index];
140+
array[min_index] = temp;
141+
min_heapify(array,min_index);
142+
}
143+
}
144+
}
145+
146+
public void build_min_heap(int [] array)
147+
{
148+
for(int i= (array.length/2) - 1;i>=0;i--)
149+
{
150+
min_heapify(array,i);
151+
}
152+
}
153+
154+
155+
}

greedy/utility.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package sorting;
2+
3+
import java.util.Scanner;
4+
5+
/**
6+
* Created by sanjeev on 19/12/16.
7+
*/
8+
public class utility
9+
{
10+
public static void print_array(int [] array)
11+
{
12+
for(int i= 0;i<array.length;i++)
13+
{
14+
System.out.print(array[i]+" ");
15+
}
16+
System.out.println();
17+
}
18+
19+
20+
public static void print_array(String [] array)
21+
{
22+
for(int i= 0;i<array.length;i++)
23+
{
24+
System.out.println(array[i]);
25+
}
26+
}
27+
28+
public static int [] input_for_sorting()
29+
{
30+
System.out.println("Enter the size of array.");
31+
Scanner alpha = new Scanner(System.in);
32+
int size = alpha.nextInt();
33+
int [] array = new int [size];
34+
System.out.println("Enter the numbers.");
35+
for(int i = 0;i<size;i++)
36+
{
37+
array[i] = alpha.nextInt();
38+
}
39+
return array;
40+
}
41+
}

0 commit comments

Comments
 (0)