Konsep Dasar divide and conque
Konsep Dasar divide and conque dalam bahasa C
Berikut adalah penjelasan konsep dasar Divide and Conquer:
1. Divide (Pecah)
- Tahap pertama adalah memecah masalah besar menjadi submasalah yang lebih kecil. Pemecahan ini dilakukan hingga masalah mencapai ukuran yang cukup kecil untuk dipecahkan secara langsung.
2. Conquer (Kuasai)
- Tahap ini melibatkan penyelesaian submasalah yang dihasilkan dari tahap pemecahan. Submasalah dipecahkan secara rekursif. Jika ukuran submasalah sudah cukup kecil, solusi dapat dihitung langsung.
3. Combine (Gabung)
- Tahap terakhir adalah menggabungkan solusi dari submasalah untuk membentuk solusi akhir dari masalah asli. Proses ini mengintegrasikan solusi dari setiap submasalah menjadi solusi keseluruhan.
#include <stdio.h>
int findMax(int arr[], int left, int right) {
if (left == right) {
return arr[left];
} else {
int mid = (left + right) / 2;
int maxLeft = findMax(arr, left, mid);
int maxRight = findMax(arr, mid + 1, right);
// Membandingkan hasil dari kedua subarray
return (maxLeft > maxRight) ? maxLeft : maxRight;
}
}
int main() {
int n;
// Meminta pengguna untuk memasukkan jumlah elemen dalam array
printf("Masukkan jumlah elemen dalam array: ");
scanf("%d", &n);
// Meminta pengguna untuk memasukkan elemen array
int arr[n];
printf("Masukkan elemen array:\n");
for (int i = 0; i < n; i++) {
printf("Elemen %d: ", i + 1);
scanf("%d", &arr[i]);
}
// Menggunakan algoritma Divide and Conquer untuk mencari bilangan terbesar
int maxNumber = findMax(arr, 0, n - 1);
// Menampilkan bilangan terbesar kepada pengguna
printf("Bilangan terbesar dalam array: %d\n", maxNumber);
return 0;
}
Penjelasan singkat:
Fungsi
findMax:- Fungsi ini adalah implementasi algoritma Divide and Conquer untuk mencari bilangan terbesar dalam array.
- Jika array hanya memiliki satu elemen, kembalikan elemen tersebut.
- Jika array memiliki lebih dari satu elemen, pecah array menjadi dua bagian, cari bilangan terbesar di masing-masing bagian, dan bandingkan hasilnya.
Fungsi
main:- Meminta pengguna untuk memasukkan jumlah dan elemen array.
- Memanggil fungsi
findMaxuntuk mencari bilangan terbesar. - Menampilkan bilangan terbesar kepada pengguna.
Program ini memanfaatkan paradigma Divide and Conquer untuk menemukan bilangan terbesar dalam array. Semoga membantu!
#include <stdio.h>
double pangkat(double dasar, int eksponen) {
if (eksponen == 0) {
return 1;
} else {
// Memecah masalah menjadi submasalah dengan eksponen setengah
double hasilSetengah = pangkat(dasar, eksponen / 2);
// Menggabungkan solusi dari submasalah untuk mendapatkan hasil akhir
if (eksponen % 2 == 0) {
return hasilSetengah * hasilSetengah;
} else {
return dasar * hasilSetengah * hasilSetengah;
}
}
}
int main() {
double bilanganDasar;
int eksponen;
// Meminta pengguna untuk memasukkan bilangan dasar dan eksponen
printf("Masukkan bilangan dasar: ");
scanf("%lf", &bilanganDasar);
printf("Masukkan eksponen: ");
scanf("%d", &eksponen);
// Menggunakan algoritma Divide and Conquer untuk menghitung perpangkatan
double hasilPangkat = pangkat(bilanganDasar, eksponen);
// Menampilkan hasil perpangkatan kepada pengguna
printf("Hasil perpangkatan: %.2lf\n", hasilPangkat);
return 0;
}
Penjelasan singkat:
Fungsi
pangkat:- Fungsi ini adalah implementasi algoritma Divide and Conquer untuk menghitung perpangkatan.
- Jika eksponen adalah 0, maka hasilnya adalah 1.
- Jika eksponen ganjil, pemecahan masalah dilakukan dengan memanggil rekursif untuk eksponen setengah.
- Jika eksponen genap, pemecahan masalah juga dilakukan dengan memanggil rekursif untuk eksponen setengah, tetapi hasilnya dikalikan dua kali.
Fungsi
main:- Meminta pengguna untuk memasukkan bilangan dasar dan eksponen.
- Memanggil fungsi
pangkatuntuk menghitung perpangkatan. - Menampilkan hasil perpangkatan kepada pengguna.
Program ini menggunakan pendekatan Divide and Conquer untuk menghitung perpangkatan dengan efisien. Semoga membantu!
3.
#include <stdio.h>
#include <stdlib.h>
// Fungsi untuk menggabungkan dua subarray yang terurut
void merge(int arr[], int l, int m, int r) {
int n1 = m - l + 1;
int n2 = r - m;
// Buat dua subarray sementara
int L[n1], R[n2];
// Salin data ke subarray sementara L[] dan R[]
for (int i = 0; i < n1; i++)
L[i] = arr[l + i];
for (int j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
// Gabungkan subarray kembali ke array utama
int i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
// Salin sisa elemen jika ada
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
// Fungsi utama merge sort
void mergeSort(int arr[], int l, int r) {
if (l < r) {
// Temukan titik tengah array
int m = l + (r - l) / 2;
// Panggil rekursif mergeSort untuk kedua subarray
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
// Gabungkan subarray
merge(arr, l, m, r);
}
}
int main() {
int n;
// Meminta pengguna untuk memasukkan jumlah elemen dalam array
printf("Masukkan jumlah elemen dalam array: ");
scanf("%d", &n);
// Meminta pengguna untuk memasukkan elemen array
int arr[n];
printf("Masukkan elemen array:\n");
for (int i = 0; i < n; i++) {
printf("Elemen %d: ", i + 1);
scanf("%d", &arr[i]);
}
// Menggunakan algoritma Divide and Conquer (merge sort) untuk mengurutkan array
mergeSort(arr, 0, n - 1);
// Menampilkan array yang terurut kepada pengguna
printf("Array yang terurut:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
Program ini menggunakan algoritma Merge Sort, yang merupakan algoritma pengurutan dengan pendekatan Divide and Conquer. Berikut adalah penjelasan singkat tentang program tersebut:
Fungsi
merge:- Fungsi ini digunakan untuk menggabungkan dua subarray yang terurut menjadi satu array terurut.
- Menerima tiga parameter: array
arr, indeks awall, indeks tengahm, dan indeks akhirr. - Membuat dua subarray sementara
LdanRuntuk menyimpan data.
Fungsi
mergeSort:- Fungsi ini adalah implementasi algoritma Merge Sort.
- Menerima tiga parameter: array
arr, indeks awall, dan indeks akhirr. - Jika
lkurang darir, fungsi akan mencari titik tengahmdan memanggil rekursifmergeSortuntuk kedua subarray (sebelum dan setelahm). - Selanjutnya, memanggil fungsi
mergeuntuk menggabungkan subarray yang terurut.
Fungsi
main:- Meminta pengguna untuk memasukkan jumlah dan elemen array.
- Memanggil fungsi
mergeSortuntuk mengurutkan array. - Menampilkan array yang terurut kepada pengguna.
Proses Pengurutan:
- Algoritma Merge Sort membagi array menjadi dua bagian, kemudian mengurutkan masing-masing bagian secara rekursif.
- Setelah itu, dua bagian yang terurut digabungkan kembali secara berurutan dengan menggunakan fungsi
merge.
Output:
- Program menampilkan array yang terurut setelah proses pengurutan selesai.
Program ini menunjukkan penerapan algoritma Divide and Conquer untuk mengurutkan array menggunakan Merge Sort. Pendekatan ini membantu meningkatkan efisiensi algoritma pengurutan. Semoga penjelasan ini membantu memahami program tersebut.



Comments
Post a Comment