1- please help me to solve this program, the extended this code to add the function for deleting minimum or maximum values is not working properly, please correct it along with its main function and correct output.
#include <stdio.h>
void swap(int a[], int n1, int n2) {
int temp = a[n1];
a[n1] = a[n2];
a[n2] = temp;
}
int get_parent(int n) {
if (!(n % 4)) return (n - 4) / 2;
if (!(n % 2)) return (n - 2) / 2;
if (((n - 1) % 4)) return (n - 3) / 2;
else return (n - 1) / 2;
}
void heapify_max(int a[], int n) {
int parent = get_parent(n);
while (n > 1 && a[n] > a[parent]) {
swap(a, n, parent);
n = parent;
parent = get_parent(n);
}
}
void heapify_min(int a[], int n) {
int parent = get_parent(n);
while (n > 0 && a[n] < a[parent]) {
swap(a, n, parent);
n = parent;
parent = get_parent(n);
}
}
void insert_intervalheap(int a[], int *pos, int val) {
int n = *pos, parent, parent1;
(*pos)++;
a[n] = val;
if (n == 0) return;
if (n == 1) {
if (a[0] > a[1]) swap(a, 0, 1);
return;
}
if (!(n % 2)) {
parent = get_parent(n);
} else {
parent1 = get_parent(n) + 1;
if (a[n] < a[parent]) {
swap(a, n, parent);
heapify_min(a, parent);
}
if (a[n] > a[parent1]) {
swap(a, n, parent1);
heapify_max(a, parent1);
}
}
}
int get_min(int a[], int n)
{
return (a[0]);
}
int get_max(int a[], int n) {
if (n > 1) {
return (a[1]);
} else {
return (a[0]);
}
}
int delete_min(int a[], int *pos) {
if (*pos == 0) {
printf("Interval heap is empty. Cannot delete minimum value.\n");
return -1;
}
int min = a[0];
*pos -= 1;
a[0] = a[*pos];
heapify_min(a, 0);
return min;
}
int delete_max(int a[], int *pos) {
if (*pos == 0) {
printf("Interval heap is empty. Cannot delete maximum value.\n");
return -1;
}
int max = a[1];
*pos -= 1;
a[1] = a[*pos];
heapify_max(a, 1);
return max;
}
int main() {
int i, interval_heap[100], n = 0;
while (1) {
printf("\n Enter any positive value to insert in interval heap and negative number to stop: ");
scanf("%d", &i);
if (i < 0) break;
insert_intervalheap(interval_heap, &n, i);
printf("\nTotal elements in Interval Heap=%d\nMinimum-%d\nMaximum-%d", n, get_min(interval_heap, n), get_max(interval_heap, n));
}
return 0;
}
2- Please send me the complete code for Huffman Coding using the bitwise operator and its main functions.
#include <iostream>
#include <queue>
#include <unordered_map>
#include <bitset>
using namespace std;
// Tree node for Huffman coding
struct HuffmanNode {
char data;
int freq;
HuffmanNode *left, *right;
HuffmanNode(char data, int freq) {
this->data = data;
this->freq = freq;
left = right = NULL;
}
};
struct Compare {
bool operator()(HuffmanNode* a, HuffmanNode* b) {
return a->freq > b->freq;
}
};
void generateCodes(HuffmanNode* root, string code, unordered_map<char, string>& codes) {
if (root == NULL) return;
if (root->data != '\0') {
codes[root->data] = code;
}
generateCodes(root->left, code + '0', codes);
generateCodes(root->right, code + '1',.
1- please help me to solve this program- the extended this code to add.docx
1. 1- please help me to solve this program, the extended this code to add the function for
deleting minimum or maximum values is not working properly, please correct it along with
its main function and correct output.
#include <stdio.h>
void swap(int a[], int n1, int n2) {
int temp = a[n1];
a[n1] = a[n2];
a[n2] = temp;
}
int get_parent(int n) {
if (!(n % 4)) return (n - 4) / 2;
if (!(n % 2)) return (n - 2) / 2;
if (((n - 1) % 4)) return (n - 3) / 2;
else return (n - 1) / 2;
}
void heapify_max(int a[], int n) {
int parent = get_parent(n);
while (n > 1 && a[n] > a[parent]) {
swap(a, n, parent);
n = parent;
parent = get_parent(n);
}
}
void heapify_min(int a[], int n) {
int parent = get_parent(n);
while (n > 0 && a[n] < a[parent]) {
swap(a, n, parent);
n = parent;
parent = get_parent(n);
}
}
void insert_intervalheap(int a[], int *pos, int val) {
int n = *pos, parent, parent1;
(*pos)++;
a[n] = val;
if (n == 0) return;
if (n == 1) {
if (a[0] > a[1]) swap(a, 0, 1);
return;
}
2. if (!(n % 2)) {
parent = get_parent(n);
} else {
parent1 = get_parent(n) + 1;
if (a[n] < a[parent]) {
swap(a, n, parent);
heapify_min(a, parent);
}
if (a[n] > a[parent1]) {
swap(a, n, parent1);
heapify_max(a, parent1);
}
}
}
int get_min(int a[], int n)
{
return (a[0]);
}
int get_max(int a[], int n) {
if (n > 1) {
return (a[1]);
} else {
return (a[0]);
}
}
int delete_min(int a[], int *pos) {
if (*pos == 0) {
printf("Interval heap is empty. Cannot delete minimum value.n");
return -1;
}
int min = a[0];
*pos -= 1;
a[0] = a[*pos];
heapify_min(a, 0);
return min;
}
int delete_max(int a[], int *pos) {
if (*pos == 0) {
printf("Interval heap is empty. Cannot delete maximum value.n");
return -1;
}
int max = a[1];
3. *pos -= 1;
a[1] = a[*pos];
heapify_max(a, 1);
return max;
}
int main() {
int i, interval_heap[100], n = 0;
while (1) {
printf("n Enter any positive value to insert in interval heap and negative number to stop: ");
scanf("%d", &i);
if (i < 0) break;
insert_intervalheap(interval_heap, &n, i);
printf("nTotal elements in Interval Heap=%dnMinimum-%dnMaximum-%d", n,
get_min(interval_heap, n), get_max(interval_heap, n));
}
return 0;
}
2- Please send me the complete code for Huffman Coding using the bitwise operator and its
main functions.
#include <iostream>
#include <queue>
#include <unordered_map>
#include <bitset>
using namespace std;
// Tree node for Huffman coding
struct HuffmanNode {
char data;
int freq;
HuffmanNode *left, *right;
HuffmanNode(char data, int freq) {
this->data = data;
this->freq = freq;
left = right = NULL;
}
};
struct Compare {
bool operator()(HuffmanNode* a, HuffmanNode* b) {
return a->freq > b->freq;
}
};
4. void generateCodes(HuffmanNode* root, string code, unordered_map<char, string>& codes) {
if (root == NULL) return;
if (root->data != '0') {
codes[root->data] = code;
}
generateCodes(root->left, code + '0', codes);
generateCodes(root->right, code + '1', codes);
}
unordered_map<char, string> buildHuffmanTree(string text) {
unordered_map<char, int> freqMap;
for (char c : text) {
freqMap[c]++;
}
priority_queue<HuffmanNode*, vector<HuffmanNode*>, Compare> pq;
for (auto& p : freqMap) {
pq.push(new HuffmanNode(p.first, p.second));
}
while (pq.size() > 1) {
HuffmanNode* left = pq.top();
pq.pop();
HuffmanNode* right = pq.top();
pq.pop();
HuffmanNode* parent = new HuffmanNode('0', left->freq + right->freq);
parent->left = left;
parent->right = right;
pq.push(parent);
}
unordered_map<char, string> codes;
generateCodes(pq.top(), "", codes);
return codes;
}
// Encodes the text using the generated Huffman codes
string huffmanEncode(string text, unordered_map<char, string>& codes) {
string encodedText = "";
for (char c : text) {
encodedText += codes[c];
}
return encodedText;
}
// Decodes the Huffman-encoded text using the generated Huffman codes
string huffmanDecode(string encodedText, unordered_map<char, string>& codes) {