Реализую структура данных "Пирамида" и некоторые методы к ней. Все работает, но беда в том, что очень медленно. А я не понимаю, где копать, где программа может тормозить, ведь все методы довольно скростные. Прикрепляю свой код. Ни у кого нет идей, что переделать?
#include <iostream>
#include <cstring>
using namespace std;
struct Node {
int data;
int num;
};
struct Heap {
Node* nodes;
int* helpNodes;
int h_size;
void Down(int index) {
int left = 2 * index + 1;
int right = 2 * index + 2;
int imin = index;
if (left < this->h_size && nodes[left].data < nodes[imin].data) {
imin = left;
}
if (right < this->h_size && nodes[right].data < nodes[imin].data) {
imin = right;
}
if (index != imin) {
swap(nodes[index], nodes[imin]);
Down(imin);
}
}
void Up(int index) {
while (index > 0) {
int parent = (index - 1) / 2;
if (nodes[index].data < nodes[parent].data) {
swap(nodes[index], nodes[parent]);
index = parent;
}
else {
return;
}
}
}
void Insert(int x, int n) {
nodes[h_size].data = x;
nodes[h_size].num = n;
helpNodes[nodes[h_size].num] = x;
this->Up(h_size);
++this->h_size;
}
void extract_min() {
helpNodes[nodes[0].num] = -1;
swap(nodes[0], nodes[h_size - 1]);
--this->h_size;
this->Down(0);
}
void Change(int i, int x) {
if (helpNodes[i] == -1) {
cout << "error" << endl;
return;
}
int q = 0;
for (; q < h_size && nodes[q].num != i; ++q) {}
if (h_size != 0 && q < h_size && nodes[q].num == i) {
nodes[q].data = x;
helpNodes[nodes[q].num] = x;
this->Up(q);
this->Down(q);
cout << "ok" << endl;
}
else {
cout << "error" << endl;
}
}
void Delete(int i) {
if (helpNodes[i] == -1) {
cout << "error" << endl;
return;
}
int q = 0;
for (; q < h_size && nodes[q].num != i; ++q) {}
if (h_size != 0 && q < h_size && nodes[q].num == i) {
nodes[q].data = -1;
helpNodes[nodes[q].num] = -1;
this->Up(q);
swap(nodes[0], nodes[h_size - 1]);
--h_size;
this->Down(0);
cout << "ok" << endl;
}
else {
cout << "error" << endl;
}
}
void Clear() {
while (h_size) {
this->extract_min();
}
}
};
void Initheap(Heap* h)
{
h->helpNodes = new int[200000];
h->nodes = new Node[200000];
h->h_size = 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Открываю файл в бинарном режиме, но при этом форматированный ввод с помощью >> компилируетсяКакое поведение ожидать от такого кода с т
Проблема такая: есть файл, где данные записаны сплошным столбикомСначала имя, потом возраст
Есть строка, в которой встречаются такие вещи, как ((число)