Ibrahim’s Blog

24 Jul, 2007

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

Posted by: Ibrahim 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 INDONESIA Windows XP Mozilla Firefox 2.0.0.5

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 INDONESIA Windows XP Mozilla Firefox 2.0.0.5

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


  • anti: eh maaf kayanya saya salah orang. saya kira anda kakak kelas saya. ternyata pas cek di about nya bukan. maaf ya.. ibrahim:
  • anti: kak baimmm interview di INCO ya?? udah di ambil aja. Sorowako itu indah banget.. nget.. nget. Hidup disana tenang damai aman sentosa. Ngga tau si buat
  • Ibrahim: Maksudnya bahasa ASCII? mungkin maksudnya karakter ASCII. Kalau di windows bisa dilihat dengan memakai aplikasi Character Map (charmap.exe). Untuk p

Flickr PhotoStream

  • Kawah Putih
  • Kawah Putih
  • IMG_0456
  • IMG_0463

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  

  • Pages displayed : 4158
  • Unique visitors : 2279
  • Pages displayed in last 24 hours : 71
  • Unique visitors in last 24 hours : 43
FireStats icon Powered by FireStats