Anda di halaman 1dari 9

Nama : Budi Kurniawan

Mata Kuliah : Algoritma

Tugas :

1. Rancanglah algoritma divide and conquer untuk menentukan kandidat yang berpeluang
memperoleh suara paling banyak (mayoritas).
2. Buatlah program komputernya dari algoritma diatas dengan menggunakan bahasa
pemrograman C/C++ atau JAVA.

Jawab :

1. Algoritma
 function majority ( int [ ] A, int InL, int inD )
 if inD = 1 return A (O)
 int major L = majority ( A, inL, inD / 2-1 )
 int major D = majority ( A, inD / 2+1, inD )
 int count = O
 for i = o to inD
o if A (i) = major L

 count = count + 1

 end if

 end for
 if count > inD/2 return major L
 count = o
 for i = o to inD – 1
 if A ( i ) = major D
 count = count + 1
 end if
 end for
 if count > inD/2 return major D
 return – 1

- function main
 int Array ( n )
 int Index L = O
 int Index D = n – 1
 int x = majority ( Array, index L, index D )
 if x = - 1
 print ( nilai terbanyak tidak ditemukan )
 else
 print ( nilai terbanyak adalah X )

2.

 /************************************
 * @author Budi Kurniawan Hutasuhut *
 * *
 ***********************************/
 public class pemilu {

 /**
 * @param args
 */
 public static void main(String[] args) {

 String input;
 Scanner scan = new Scanner(System.in);

 System.out.println("Hasil suara pemilu : ");
 input = scan.nextLine();

 //Inisialisasi array char sebanyak input hasil suara
 char[] hasil = new char[input.length()];

 //Looping memasukkan hasil suara kedalam array
 for(int i = 0; i<input.length();i++){
 hasil[i] = input.charAt(i);
 }

 //Cek jumlah suara genap atau tidak
 //jika genap lanjut ke proses, jika tidak kembali ke awal
 if(input.length() % 2 == 0){
 char hasilSuara = kandidat_mayoritas(hasil);
 if(hasilSuara == '0'){
 System.out.println("Tidak ada kandidat yang
mayoritas");
 }
 else {
 System.out.println("Kandidat mayoritas
adalah : "+ kandidat_mayoritas(hasil));
 }
 }
 else {
 System.out.println("Jumlah Suara Harus Genap !");

 //Kembali ke awal proses jika jumlah suara tidak
genap
 main(null);
 }

 }

 private static char kandidat_mayoritas(char[] suara) {
 if (suara.length == 1) return suara[0];

 //pengambilan nilai tengah dari jumlah suara
 int nilaiTengah = suara.length / 2;

 //Inisialisasi pembagian array char untuk bagian kiri dan
kanan
 char[] arrayKiri = new char[nilaiTengah];
 char[] arrayKanan = new char[(suara.length)-(nilaiTengah)];

 //mengisi hasil suara kedalam array kiri
 for(int i = 0; i<nilaiTengah;i++){
 arrayKiri[i] = suara[i];
 }

 //mengisi hasil suara ke array kanan
 int index = 0;
 for(int i=nilaiTengah;i<suara.length;i++){
 arrayKanan[index] = suara[i];
 index++;
 }

 //Rekursif untuk menampung elemenKanan dan elemenKiri
 char elemenKiri = kandidat_mayoritas(arrayKiri);
 char elemenKanan = kandidat_mayoritas(arrayKanan);

 //Cek kedua elemen
 //jika keduanya sama, maka kandidat itu mayoritas
 if(elemenKanan == elemenKiri) return elemenKanan;

 //Lakukan penghitungan jika elemen kiri dan kanan tidak
sama
 //Kandidat yang lebih besar dari nilaiTengah (setengah dari
total suara) adalah kandidat mayoritas
 int jumlahKiri = hitungJumlah(suara,elemenKiri);
 int jumlahKanan = hitungJumlah(suara, elemenKanan);

 //Cek jumlah suara, apakah melebihi nilai tengah
 if(jumlahKiri > nilaiTengah){
 return elemenKiri;
 }
 else if (jumlahKanan > nilaiTengah){
 return elemenKanan;
 }
 else{
 return '0'; //tidak ada yang dominan
 }
 }

 private static int hitungJumlah(char[] suara, char elemen) {
 // TODO Auto-generated method stub

 int jumlah = 0;

 //menghitung jumlah elemen dalam hasil suara
 for(int i = 0; i < suara.length; i++){
 if(suara[i] == elemen){
 jumlah++;
 }
 }

 return jumlah;
 }
 }

Anda mungkin juga menyukai