ํฐ์คํ ๋ฆฌ ๋ทฐ
Programming/์๊ณ ๋ฆฌ์ฆ
[ํ๊ณผ ํ์ ๋ ฌ] ํ ์์ฑ (์์ฐจํ, ์ต๋ํ)
ํด๋์๊ทธ 2021. 9. 29. 18:31[ํ ์์ฑ]
1. ์ฝ์ ์ >> ๋ชจ๋ ํค๋ค์ด ๋ฏธ๋ฆฌ ์ฃผ์ด์ง ๊ฒฝ์ฐ, ๋๋ ํค๋ค์ด ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ ์ ์ฉ ๊ฐ๋ฅ
2. ์ํฅ์ >> ๋ชจ๋ ํค๋ค์ด ๋ฏธ๋ฆฌ ์ฃผ์ด์ง ๊ฒฝ์ฐ๋ง ์ ์ฉ ๊ฐ๋ฅ
1. ์ฝ์ ์ ํ ์์ฑ
#include <stdio.h>
#include <stdlib.h>
int H[99]; // ํ ๋ฐฐ์ด
int n = 0; // ํ์ ํฌ๊ธฐ
void upHeap(int i) {// ket ์ฝ์
ํ ์ ๋ ฌํ๋ ํจ์
int tmp;
if (i == 1)
return;
if (H[i] <= H[i / 2]) // i๊ฐ root๊ฐ ์๋ ๋ ๋ถ๋ชจ๋
ธ๋๋ณด๋ค ์์ผ๋ฉด ๊ทธ๋๋ก ๋ฐํ
return;
// i๊ฐ ๋ถ๋ชจ๋
ธ๋๋ณด๋ค ํฌ๋ค๋ฉด swapํด์ฃผ๊ธฐ
tmp = H[i];
H[i] = H[i / 2];
H[i / 2] = tmp;
upHeap(i / 2);// ๋ถ๋ชจ๋
ธ๋๊ฐ ๋ฐ๊ผ์ผ๋๊น ๋ค์ ํธ์ถํด์ ๊ทธ ๋ถ๋ชจ๋
ธ๋์ ๋ถ๋ชจ๋
ธ๋์ ๊ฐ ๋น๊ตํด์ฃผ๊ธฐ
}
void downHeap(int i) {// ์ต๋ํ ๋ฐํ ํ ์ ๋ ฌํ๋ ํจ์
int left = i * 2; //์ผ์ชฝ ์์๋
ธ๋ ์ธ๋ฑ์ค, i๋ 1๋ก ํธ์ถ๋๊ธฐ ๋๋ฌธ์ root
int right = i * 2 + 1; // ์ค๋ฅธ์ชฝ ์์๋
ธ๋ ์ธ๋ฑ์ค
int max, tmp; //max๊ฐ
if (n < left && n < right)// ์์๋
ธ๋๊ฐ ๋๋ค ์๋ค๋ฉด ๋ฐํ
return;
max = left;// ์๋๋ผ๋ฉด max์ ์ผ์ชฝ ์์๋
ธ๋ ์ธ๋ฑ์ค๋ฅผ ๋ฃ์
if (n >= right) {// ์ค๋ฅธ์ชฝ ์์๋
ธ๋๋ ์๋ค๋ฉด
if (H[max] < H[right]) {//๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ ์์๋
ธ๋ ๊ฐ๋ณด๋ค ์ค๋ฅธ์ชฝ ์์๋
ธ๋ ๊ฐ์ด ํฌ๋ค๋ฉด
max = right;// max์ ์ค๋ฅธ์ชฝ ์์๋
ธ๋ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅ
}
}
if (H[max] <= H[i])// max์๋ ์ผ์ชฝ or ์ค๋ฅธ์ชฝ ์์๋
ธ๋ ์ธ๋ฑ์ค๊ฐ ๋ค์ด์์, ๊ทธ ๊ฐ์ด root๊ฐ๋ณด๋ค ์ ๋ค๋ฉด ๊ทธ๋ฅ ๋ฐํ
return;
// ์๋๋ผ๋ฉด == ์ผ์ชฝ or ์ค๋ฅธ์ชฝ ์์๋
ธ๋ ๊ฐ์ด root๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด swap
tmp = H[i];
H[i] = H[max];
H[max] = tmp;
downHeap(max);
}
void insertItem(int key) {
n += 1;
H[n] = key;
upHeap(n);
}
int removeMax() {//์ต๋ํ ๋ฐํ ๋ฐ ์ญ์
int key;
key = H[1];
H[1] = H[n];
n -= 1;
downHeap(1);
return key;
}
void printHeap() {
for (int i = 1; i <= n; i++) {
printf(" %d", H[i]);
}
printf("\n");
}
int main() {
char type;
int key;
while (1) {
scanf("%c", &type);
if (type == 'q')
break;
else if (type == 'i') {
scanf("%d", &key);
insertItem(key);
printf("0\n");
}
else if (type == 'd') {
printf("%d\n", removeMax());
}
else if (type == 'p') {
printHeap();
}
}
return 0;
}
2. ์ํฅ์ ํ ์์ฑ
#include <stdio.h>
#include <stdlib.h>
int H[99]; // ํ ๋ฐฐ์ด
int n; // ํ์ ํฌ๊ธฐ
void downHeap(int i) {
int left = i * 2;
int right = i * 2 + 1;
int max, tmp;
if (n < left && n < right)
return;
max = left;
if (n >= right) {
if (H[max] < H[right]) {
max = right;
}
}
if (H[max] <= H[i])
return;
tmp = H[i];
H[i] = H[max];
H[max] = tmp;
downHeap(max);
}
void rBuildHeap(int i) {
if (i > n)
return;
rBuildHeap(i * 2);
rBuildHeap(i * 2 + 1);
downHeap(i);
return;
}
void printHeap() {
for (int i = 1; i <= n; i++) {
printf(" %d", H[i]);
}
printf("\n");
}
int main() {
int i;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &H[i]);
getchar();
}
rBuildHeap(1);
printHeap();
return 0;
}
๋ฐ์ํ
'Programming > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฌ์ ] ์ด์งํ์(์ฌ๊ท, ๋น์ฌ๊ท, ์ซ์๋ง์ถ๊ธฐ) (0) | 2021.10.20 |
---|---|
[ํต ์ ๋ ฌ] ๋ฐฐ์ด์ ์ด์ฉํ ํต ์ ๋ ฌ ๊ตฌํ (0) | 2021.10.19 |
[ํฉ๋ณ ์ ๋ ฌ] ๋จ์ผ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ ํฉ๋ณ์ ๋ ฌ ๊ตฌํ (0) | 2021.10.19 |
[ํ๊ณผ ํ์ ๋ ฌ] ํ ์ ๋ ฌ (์์ฐจํ, ์ต๋ํ) (0) | 2021.09.29 |
[์ฐ์ ์์ ํ] ์ ์๋ฆฌ ์ ๋ ฌ(์ ํ์ ๋ ฌ, ์ฝ์ ์ ๋ ฌ) (0) | 2021.02.08 |
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- ์ฝํ ์ค๋น
- ์คํ ์ด๋ธ๋ํจ์
- ๋ ผ๋ฌธ๋ฆฌ๋ทฐ
- AIRUSH
- SQL
- SKTECHSUMMIT
- StableDiffusion
- ์ฝ๋ฉ๊ณต๋ถ
- CLOVAX
- ์ฝ๋ฉ์๋ฌ
- ํ์ด์ฌ
- lgaimers
- ํ ํฌ์๋ฐ
- AIRUSH2023
- ๊ธฐ์ ์ปจํผ๋ฐ์ค
- WGAN
- dreambooth
- ์ฝํ
- ๋๋ฆผ๋ถ์ค
- AI์ปจํผ๋ฐ์ค
- C์ธ์ด
- ๊ตฌ๊ธ์ฝ๋ฉ
- ๋ ผ๋ฌธ์ฝ๊ธฐ
- ํ์ด์ฌ์ฝํ
- MYSQL
- Aimers
- DALLE
- gan
- HyperCLOVA
- ํ๋ก๊ทธ๋๋จธ์ค
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
๊ธ ๋ณด๊ดํจ