Ibrahim’s Blog

24 Jul, 2007

Menukar Nilai 2 Variabel tanpa Variabel Perantara (Memorisasi vs. Kalkulasi)

Posted by: Ibrahim Burhan In: Codes|Know How

Bagaimana cara menukar (swap) nilai 2 variabel tanpa menggunakan variabel perantara (temporary)?

Bagi yang belum mengetahui, untuk menukar nilai 2 variabel, biasanya kita menggunakan variabel perantara untuk menampung sementara nilai, sebagaimana cuplikan kode (dalam bahasa Java) di bawah ini:

public class SwapWithTemp {
   public static void main(String[] args) {
     int x = 34, y = 78, t;
     t = x;
     x = y;
     y = t;
     System.out.println(x + " " + y);
   }
}

Pada kode di atas, t adalah variabel penampung nilai x, sebelum nilai x ditimpa oleh nilai y.

Operasi XOR (exclusive or) dapat digunakan untuk menukar nilai 2 variabel tanpa harus menggunakan variabel perantara. Berikut cuplikan kodenya (dalam bahasa Java):

public class SwapWithoutTemp {
   public static void main(String[] args) {
     int x = 34, y = 78;
     x = x ^ y;
     y = x ^ y;
     x = x ^ y;
     System.out.println(x + " " + y);
   }
}

Lalu… Apa perbedaan antara keduanya?

In my opinion. Hasil kedua cara di atas adalah tetap sama, tetapi dalam pemrosesannya terdapat perbedaan, yaitu: pada cara pertama tidak dibutuhkan kalkulasi (perhitungan) yang ada hanyalah memorisasi (penggunaan memori/ingatan), sedangkan cara kedua memorisasi lebih sedikit tetap membutuhkan beberapa kalkulasi.

Saya teringat waktu kuliah, seorang teman mengatakan tentang “Hukum Kekekalan Informatika” (valid enggak ya istilah ini?) yang menyatakan bahwa “kalkulasi berbanding terbalik dengan memorisasi”. Apakah permyataan ini masih relevan dengan realitas saat ini?

Catatan: Algoritma XOR di atas diambil dari handout Web Algorithms (Jason Hunter), Session TS-6045, JavaOne 2007.

2 Responses to "Menukar Nilai 2 Variabel tanpa Variabel Perantara (Memorisasi vs. Kalkulasi)"

1 | Fadli

July 27th, 2007 at 14:31

Avatar

Lebih sederhana ini khan :)

public class SwapWithoutTemp {
public static void main(String[] args) {
int x = 34, y = 78;
x = x+y;
y = x-y;
x = x-y;
System.out.println(x + ” ” + y);
}
}

2 | Ibrahim

July 27th, 2007 at 14:47

Avatar

Yup, itu cara lain juga. Tapi hati-hati dengan overflow.
Point yang ingin saya sampaikan sebenarnya adalah mengenai Memorisasi vs. Kalkulasi.
Menguransi memorisasi berakibat pada meningkatnya kalkulasi, begitu pula sebaliknya.

Comment Form


  • sri rahardjo, ir: banyak kenangan yg aku rasakan selama berkarya di kpc aku jadi teringat begitu membaca tulisanmu begitu menyentuh begitu menggugah kapan ingin r
  • sri rahardjo, ir: ass ww semoga tulisannya tetap dilakukan bisa jadi mirrow utk org lain dan memberi manfaat aku pernah di kpc 6thnan di awal2 project dan hasil jeri
  • alifajarudin: Makasih mas atas tulisnya, klo bisa sample code untuk CRUD dengan mysqlnya mas, terimakasih banyak mas...

About

Blog ini adalah sebagai ruang menumpahkan rasa, pikir dan aksi dari seorang yang mencoba melakukan perubahan.

 

July 2007
M T W T F S S
« Jun   Aug »
 1
2345678
9101112131415
16171819202122
23242526272829
3031