Upload files to 'Exercise 2 - Heap (Week 3)'
This commit is contained in:
parent
0336a17252
commit
0d4bb59657
BIN
Exercise 2 - Heap (Week 3)/Ex2.pdf
Normal file
BIN
Exercise 2 - Heap (Week 3)/Ex2.pdf
Normal file
Binary file not shown.
97
Exercise 2 - Heap (Week 3)/Ex2.txt
Normal file
97
Exercise 2 - Heap (Week 3)/Ex2.txt
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
177
|
||||||
|
284
|
||||||
|
870
|
||||||
|
319
|
||||||
|
47
|
||||||
|
312
|
||||||
|
14
|
||||||
|
885
|
||||||
|
662
|
||||||
|
467
|
||||||
|
955
|
||||||
|
269
|
||||||
|
719
|
||||||
|
169
|
||||||
|
434
|
||||||
|
306
|
||||||
|
300
|
||||||
|
253
|
||||||
|
65
|
||||||
|
373
|
||||||
|
37
|
||||||
|
99
|
||||||
|
132
|
||||||
|
27
|
||||||
|
30
|
||||||
|
835
|
||||||
|
242
|
||||||
|
221
|
||||||
|
957
|
||||||
|
38
|
||||||
|
582
|
||||||
|
837
|
||||||
|
177
|
||||||
|
126
|
||||||
|
308
|
||||||
|
963
|
||||||
|
808
|
||||||
|
382
|
||||||
|
633
|
||||||
|
489
|
||||||
|
426
|
||||||
|
406
|
||||||
|
159
|
||||||
|
579
|
||||||
|
899
|
||||||
|
47
|
||||||
|
784
|
||||||
|
668
|
||||||
|
88
|
||||||
|
359
|
||||||
|
163
|
||||||
|
688
|
||||||
|
544
|
||||||
|
415
|
||||||
|
581
|
||||||
|
796
|
||||||
|
903
|
||||||
|
856
|
||||||
|
285
|
||||||
|
948
|
||||||
|
803
|
||||||
|
679
|
||||||
|
567
|
||||||
|
911
|
||||||
|
38
|
||||||
|
491
|
||||||
|
451
|
||||||
|
263
|
||||||
|
473
|
||||||
|
48
|
||||||
|
818
|
||||||
|
378
|
||||||
|
729
|
||||||
|
446
|
||||||
|
218
|
||||||
|
534
|
||||||
|
130
|
||||||
|
673
|
||||||
|
269
|
||||||
|
113
|
||||||
|
940
|
||||||
|
644
|
||||||
|
494
|
||||||
|
275
|
||||||
|
31
|
||||||
|
832
|
||||||
|
658
|
||||||
|
932
|
||||||
|
210
|
||||||
|
502
|
||||||
|
783
|
||||||
|
248
|
||||||
|
914
|
||||||
|
283
|
||||||
|
753
|
||||||
|
739
|
||||||
|
43
|
BIN
Exercise 2 - Heap (Week 3)/Ex2_Prof_Solution.pdf
Normal file
BIN
Exercise 2 - Heap (Week 3)/Ex2_Prof_Solution.pdf
Normal file
Binary file not shown.
195
Exercise 2 - Heap (Week 3)/ex2.c
Normal file
195
Exercise 2 - Heap (Week 3)/ex2.c
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
/* License: AGPLv3 or later. https://www.gnu.org/licenses/licenses.html
|
||||||
|
*
|
||||||
|
* Exercise 2 - Implementing a heap (Week 3)
|
||||||
|
* Name: Manish
|
||||||
|
* Student Login: *****
|
||||||
|
*
|
||||||
|
* Compile as:
|
||||||
|
* $ gcc -std=c11 -Wall -o ex2 ex2.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
// assert used only for testing heap property
|
||||||
|
// #include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int heap[100];
|
||||||
|
int size = 0;
|
||||||
|
|
||||||
|
void makeheap();
|
||||||
|
void shiftdown(int index);
|
||||||
|
// void shiftup(int index);
|
||||||
|
// void swap(int i, int j);
|
||||||
|
// int min(int i, int j);
|
||||||
|
// void test_heap();
|
||||||
|
// int is_bigger_or_equal(int bigger, int smaller);
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
printf("Enter file name: ");
|
||||||
|
char filename[257];
|
||||||
|
// Assuming filename/file path won't be longer than 256 characters
|
||||||
|
scanf("%256s", filename);
|
||||||
|
|
||||||
|
FILE* file = fopen(filename, "r");
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
perror(filename);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trailing whitespace to consume all subsequent ' ', \t, \n, \r
|
||||||
|
while (fscanf(file, " %d ", &heap[size]) != EOF)
|
||||||
|
{
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
makeheap();
|
||||||
|
|
||||||
|
// test_heap();
|
||||||
|
|
||||||
|
// int upto = min(5, size);
|
||||||
|
// Assuming at least 5 integers will be read (else segfault!)
|
||||||
|
for (int i = 0; i < 5; i++)
|
||||||
|
{
|
||||||
|
printf("%d ", heap[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void makeheap()
|
||||||
|
{
|
||||||
|
// Shiftdown Method
|
||||||
|
int shiftdowns_required = (size / 2)-1;
|
||||||
|
for (int i = shiftdowns_required; i >= 0; i--)
|
||||||
|
{
|
||||||
|
shiftdown(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shiftup method
|
||||||
|
/*for (int i = 0; i < size; i++)
|
||||||
|
{
|
||||||
|
shiftup(i);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void shiftdown(int index)
|
||||||
|
{
|
||||||
|
int child;
|
||||||
|
int temp; // used for swapping
|
||||||
|
// Loop instead of recursion for efficiency
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
child = (index * 2) + 1;
|
||||||
|
// Reached end of tree
|
||||||
|
if (child >= size)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Has only one child
|
||||||
|
if (child + 1 >= size)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
// Has both children
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Pick the bigger child
|
||||||
|
if (heap[child] < heap[child + 1])
|
||||||
|
{
|
||||||
|
child = child + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (heap[index] < heap[child])
|
||||||
|
{
|
||||||
|
// swap
|
||||||
|
temp = heap[index];
|
||||||
|
heap[index] = heap[child];
|
||||||
|
heap[child] = temp;
|
||||||
|
|
||||||
|
index = child;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
void shiftup(int index)
|
||||||
|
{
|
||||||
|
int parent;
|
||||||
|
int temp; // used for swapping
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
if (index == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
parent = (index - 1) / 2;
|
||||||
|
if (parent >= 0)
|
||||||
|
{
|
||||||
|
if (heap[parent] < heap[index])
|
||||||
|
{
|
||||||
|
// swap
|
||||||
|
temp = heap[index];
|
||||||
|
heap[index] = heap[parent];
|
||||||
|
heap[parent] = temp;
|
||||||
|
|
||||||
|
index = parent;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
/*
|
||||||
|
inline void swap(int i, int j)
|
||||||
|
{
|
||||||
|
int temp = heap[i];
|
||||||
|
heap[i] = heap[j];
|
||||||
|
heap[j] = temp;
|
||||||
|
}*/
|
||||||
|
/*
|
||||||
|
inline int min(int i, int j)
|
||||||
|
{
|
||||||
|
if (i < j)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return j;
|
||||||
|
}*/
|
||||||
|
/*
|
||||||
|
void test_heap()
|
||||||
|
{
|
||||||
|
int checks_required = (size/2)+1;
|
||||||
|
int child;
|
||||||
|
for (int i=0; i < checks_required; i++)
|
||||||
|
{
|
||||||
|
// Left child
|
||||||
|
child = (i*2)+1;
|
||||||
|
assert(is_bigger_or_equal(i, child));
|
||||||
|
// Right child
|
||||||
|
assert(is_bigger_or_equal(i, ++child));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int is_bigger_or_equal(int bigger, int smaller)
|
||||||
|
{
|
||||||
|
if (bigger < size && smaller < size)
|
||||||
|
{
|
||||||
|
return (heap[bigger] >= heap[smaller]);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
*/
|
2
Exercise 2 - Heap (Week 3)/makefile
Normal file
2
Exercise 2 - Heap (Week 3)/makefile
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ex2: ex2.c
|
||||||
|
gcc -Wall -std=c11 -o ex2 ex2.c
|
Loading…
Reference in New Issue
Block a user