My comments and thoughts on technology, education, creative thinking, long-life learning.
Friday, August 26, 2011
Friday, August 05, 2011
About Time to Excel in Life
Wolfgang Amadeus Mozart, the musical
genius, once wrote to his friend,
“People err who think my art comes
easily to me. I assure you, dear friend, nobody has devoted so
much time and thought to composition as I. There is not a famous
master whose music I have not industriously studied through many
times.”
By the time he was twenty-eight years
old, his hands were deformed badly because of so many hours he had
spent practicing, performing, and gripping a quill pen to compose his
extraordinary music.
There is no such a thing such as
'natural geniuses'. All those extraordinary things happened in human
history takes time to achieve. Mention great names you have in mind,
and read their biography, and learn what they did in their life. They
devoted their life to whatever they are mastering. And when people
talk about life, implicitly they talk about time, because life is
about time.
Some people think the result will come
instantly. They read one great book, and they think tomorrow they
will get the 'big result'. It simply cannot happen.
Read many books, write many pages. Do
many small errors, and learn from them. Be patient and be consistent.
Don't give up because of those errors. And don't give up because the
result seem so far away or so high to reach. Be confident and be
patient to take a ladder a day, by the end of the week you will
stepped seven ladders. And if you pay enough attention to the process
of doing it, by the end of the year, you are 365 ladders higher than
those people who are expecting instant results.
Patience is not the same as not doing
anything. Patience is about put your faith about the end result,
however long it will take to get there. Patience is about taking
those ladders every day. Do something every day, whatever it is you
can do. Take that one ladder today to make you higher than anyone
else.
Time to excel in anything, takes time,
endurance, and patience.
Tuesday, August 02, 2011
Imsakiyah Ramadhan 1432 (Jakarta, iCal)
Menindaklanjuti jadwal imsakiyah Ramadhan 1432 H untuk wilayah kota Jakarta beberapa waktu lalu, berikut ini terlampir data waktu imsakiyah tersebut dalam format iCal. Dengan menggunakan format ini, mereka yang memiliki PDA / Smartphone dapat memasukkannya ke dalam agenda / calendar, sehingga setiap kali waktu sholat tiba, PDA / Smartphone anda akan memunculkan display reminder dari waktu sholat yang bersangkutan.
Data waktu sholat dibuat dengan menggunakan kriteria Muslim World League, dengan ketinggian matahari di bawah ufuk untuk waktu sholat Subuh disesuaikan menjadi 20°, sesuai dengan kriteria yang digunakan oleh Badan Hisab dan Rukyat Departemen Agama RI. Kriteria penanggalan yang digunakan adalah metode hisab Imkanur Rukyat, sehingga akhir Ramadhan jatuh bersamaan dengan hari Selasa, 30 Agustus 2011.
Data waktu sholat dibuat dengan menggunakan kriteria Muslim World League, dengan ketinggian matahari di bawah ufuk untuk waktu sholat Subuh disesuaikan menjadi 20°, sesuai dengan kriteria yang digunakan oleh Badan Hisab dan Rukyat Departemen Agama RI. Kriteria penanggalan yang digunakan adalah metode hisab Imkanur Rukyat, sehingga akhir Ramadhan jatuh bersamaan dengan hari Selasa, 30 Agustus 2011.
Saturday, July 16, 2011
Imsakiyah Ramadhan 1432
Berikut ini adalah jadwal Imsakiyah bulan Ramadhan 1432 H. Tabel ini dibuat dengan menggunakan kriteria Imkanur Rukyat untuk menghitung awal bulan Ramadhan dan awal bulan Syawal. Sedangkan untuk jadwal waktu sholat, digunakan kriteria Muslim World League. Perhitungan awal bulan Ramadhan dan Syawal dilakukan dengan bahasa pemrograman Python dengan bantuan pustaka pyEphem. Untuk data-data waktu sholat dalam tabel, digunakan algoritma perhitungan waktu sholat dari situs Praytimes.org. Tabel Imsakiyah untuk kota-kota besar lain di Indonesia, insya Allah akan menyusul diposting di blog ini.
| Imsakiyah Ramadhan 1432 | ||||||
| Jakarta | ||||||
| Hari/Tanggal | Maghrib | Isya | Imsak | Subuh | Zuhr | Asar |
| Senin 1 | Minggu 31 Juli 2011 | Senin 1 Agustus 2011 | ||||
| 17:54 | 19:03 | 04:41 | 04:51 | 11:59 | 15:21 | |
| Selasa 2 | Senin 1 Agustus 2011 | Selasa 2 Agustus 2011 | ||||
| 17:54 | 19:03 | 04:41 | 04:51 | 11:59 | 15:21 | |
| Rabu 3 | Selasa 2 Agustus 2011 | Rabu 3 Agustus 2011 | ||||
| 17:54 | 19:03 | 04:41 | 04:51 | 11:59 | 15:21 | |
| Kamis 4 | Rabu 3 Agustus 2011 | Kamis 4 Agustus 2011 | ||||
| 17:54 | 19:02 | 04:41 | 04:51 | 11:59 | 15:21 | |
| Jumat 5 | Kamis 4 Agustus 2011 | Jumat 5 Agustus 2011 | ||||
| 17:55 | 19:02 | 04:41 | 04:51 | 11:59 | 15:21 | |
| Sabtu 6 | Jumat 5 Agustus 2011 | Sabtu 6 Agustus 2011 | ||||
| 17:55 | 19:02 | 04:41 | 04:51 | 11:59 | 15:20 | |
| Ahad 7 | Sabtu 6 Agustus 2011 | Minggu 7 Agustus 2011 | ||||
| 17:55 | 19:02 | 04:41 | 04:51 | 11:58 | 15:20 | |
| Senin 8 | Minggu 7 Agustus 2011 | Senin 8 Agustus 2011 | ||||
| 17:55 | 19:02 | 04:40 | 04:50 | 11:58 | 15:20 | |
| Selasa 9 | Senin 8 Agustus 2011 | Selasa 9 Agustus 2011 | ||||
| 17:55 | 19:02 | 04:40 | 04:50 | 11:58 | 15:20 | |
| Rabu 10 | Selasa 9 Agustus 2011 | Rabu 10 Agustus 2011 | ||||
| 17:55 | 19:02 | 04:40 | 04:50 | 11:58 | 15:20 | |
| Kamis 11 | Rabu 10 Agustus 2011 | Kamis 11 Agustus 2011 | ||||
| 17:55 | 19:02 | 04:40 | 04:50 | 11:58 | 15:19 | |
| Jumat 12 | Kamis 11 Agustus 2011 | Jumat 12 Agustus 2011 | ||||
| 17:55 | 19:02 | 04:40 | 04:50 | 11:58 | 15:19 | |
| Sabtu 13 | Jumat 12 Agustus 2011 | Sabtu 13 Agustus 2011 | ||||
| 17:55 | 19:02 | 04:40 | 04:50 | 11:58 | 15:19 | |
| Ahad 14 | Sabtu 13 Agustus 2011 | Minggu 14 Agustus 2011 | ||||
| 17:54 | 19:02 | 04:39 | 04:49 | 11:57 | 15:19 | |
| Senin 15 | Minggu 14 Agustus 2011 | Senin 15 Agustus 2011 | ||||
| 17:54 | 19:01 | 04:39 | 04:49 | 11:57 | 15:18 | |
| Selasa 16 | Senin 15 Agustus 2011 | Selasa 16 Agustus 2011 | ||||
| 17:54 | 19:01 | 04:39 | 04:49 | 11:57 | 15:18 | |
| Rabu 17 | Selasa 16 Agustus 2011 | Rabu 17 Agustus 2011 | ||||
| 17:54 | 19:01 | 04:39 | 04:49 | 11:57 | 15:18 | |
| Kamis 18 | Rabu 17 Agustus 2011 | Kamis 18 Agustus 2011 | ||||
| 17:54 | 19:01 | 04:38 | 04:48 | 11:57 | 15:17 | |
| Jumat 19 | Kamis 18 Agustus 2011 | Jumat 19 Agustus 2011 | ||||
| 17:54 | 19:01 | 04:38 | 04:48 | 11:56 | 15:17 | |
| Sabtu 20 | Jumat 19 Agustus 2011 | Sabtu 20 Agustus 2011 | ||||
| 17:54 | 19:01 | 04:38 | 04:48 | 11:56 | 15:17 | |
| Ahad 21 | Sabtu 20 Agustus 2011 | Minggu 21 Agustus 2011 | ||||
| 17:54 | 19:00 | 04:37 | 04:47 | 11:56 | 15:16 | |
| Senin 22 | Minggu 21 Agustus 2011 | Senin 22 Agustus 2011 | ||||
| 17:54 | 19:00 | 04:37 | 04:47 | 11:56 | 15:16 | |
| Selasa 23 | Senin 22 Agustus 2011 | Selasa 23 Agustus 2011 | ||||
| 17:54 | 19:00 | 04:37 | 04:47 | 11:55 | 15:16 | |
| Rabu 24 | Selasa 23 Agustus 2011 | Rabu 24 Agustus 2011 | ||||
| 17:54 | 19:00 | 04:37 | 04:47 | 11:55 | 15:15 | |
| Kamis 25 | Rabu 24 Agustus 2011 | Kamis 25 Agustus 2011 | ||||
| 17:54 | 19:00 | 04:36 | 04:46 | 11:55 | 15:15 | |
| Jumat 26 | Kamis 25 Agustus 2011 | Jumat 26 Agustus 2011 | ||||
| 17:53 | 19:00 | 04:36 | 04:46 | 11:55 | 15:14 | |
| Sabtu 27 | Jumat 26 Agustus 2011 | Sabtu 27 Agustus 2011 | ||||
| 17:53 | 18:59 | 04:35 | 04:45 | 11:54 | 15:14 | |
| Ahad 28 | Sabtu 27 Agustus 2011 | Minggu 28 Agustus 2011 | ||||
| 17:53 | 18:59 | 04:35 | 04:45 | 11:54 | 15:13 | |
| Senin 29 | Minggu 28 Agustus 2011 | Senin 29 Agustus 2011 | ||||
| 17:53 | 18:59 | 04:35 | 04:45 | 11:54 | 15:13 | |
| Selasa 30 | Senin 29 Agustus 2011 | Selasa 30 Agustus 2011 | ||||
| 17:53 | 18:59 | 04:34 | 04:44 | 11:53 | 15:12 | |
| Rabu 1 Syawal | Selasa 30 Agustus 2011 | Rabu 31 Agustus 2011 | ||||
| 17:53 | 18:59 | 04:34 | 04:44 | 11:53 | 15:12 | |
Tabel ini disusun dengan meletakkan waktu Maghrib sebagai awal waktu sholat untuk setiap hari bulan Ramadhan, karena sejatinya pergantian hari dalam sistem kalender Hijriah terjadi setiap waktu Maghrib. Ini berbeda dengan sistem kalender Masehi di mana pergantian hari terjadi pada pukul 00.00 waktu setempat. Pergantian hari pada waktu Maghrib dibuktikan dengan dimulainya ibadah sholat tarawih selepas sholat Isya, yang dilakukan sebelum terjadi pergantian tanggal dan hari dalam sistem kalender Masehi. Artinya, ibadah tarawih yang dilakukan sebelum tengah malam sudah dihitung sebagai amalan ibadah bulan Ramadhan, atau dengan kata lain bulan Ramadhan sudah masuk pada saat Maghrib.
Awal Bulan Ramadhan 1432 H
Kriteria hisab Imkanur Rukyat menghitung tanggal 1 bulan Hijriah sudah bisa dimulai jika dipenuhi salah satu dari dua syarat berikut:
- Pada saat matahari terbenam setelah ijtimak ketinggian (altitude) Bulan di atas cakrawala minimum 2°, dan sudut elongasi (jarak lengkung) Bulan-Matahari minimum 3°.
- Pada saat bulan terbenam, usia Bulan minimum 8 jam, dihitung sejak ijtimak.
Berdasarkan perhitungan hisab astronomi, untuk bulan Ramadhan 1432 H, ijtimak bulan baru Ramadhan terjadi pada hari Minggu, 31 Juli 2011 pukul 01:39 WIB. Dengan demikian, ketika matahari terbenam di Jakarta pada tanggal 31 Juli 2011 pukul 17:54 WIB, umur bulan sudah 16 jam 14 menit, mencukupi syarat kedua Imkanur Rukyat untuk memulai bulan Ramadhan.
Kriteria Wujudul Hilal, mulai menghitung tanggal 1 bulan Hijriah jika syarat berikut ini dipenuhi:
- Pada petang hari terjadi ijtimak, Bulan terbenam setelah Matahari terbenam, tanpa menghitung jarak sudut antara Bulan dan Matahari ketika matahari terbenam dan berapa pun jarak sudut antara Bulan dan Matahari.
Ketika matahari terbenam pukul 17:54 WIB petang hari tanggal 31 Juli 2011, Bulan terbenam 1 jam 4 menit setelah Matahari. Dengan demikian, kriteria Wujudul Hilal mulai menghitung tanggal 1 bulan Ramadhan 1432 pada hari yang sama dengan kriteria Imkanur Rukyat.
Awal Bulan Syawal 1432 H
Kriteria Imkanur Rukyat menghitung bulan Syawal 1432 mulai masuk pada tanggal 30 Agustus 2011, pukul 17:52 WIB. Ijtimak bulan Ramadhan 1432 terjadi pada tanggal 29 Agustus 2011 pukul 10:04 WIB. Pada senja harinya, ketika matahari terbenam, bulan masih berumur 7 jam dan 49 menit, kurang dari syarat 8 jam. Ketinggian bulan pada saat matahari terbenam tanggal 29 Agustus 2011 masih kurang dari 2° di atas ufuk. Karena kedua syarat Imkanur Rukyat belum terpenuhi, maka waktu Maghrib tanggal 29 Agustus 2011 masih terhitung tanggal 30 Ramadhan.
Untuk kriteria Wujudul Hilal, pada tanggal 29 Agustus 2011, bulan terbenam 47 menit setelah matahari. Ini artinya waktu Maghrib tanggal 29 Agustus 2011 sudah masuk tanggal 1 Syawal 1432.
Kriteria Waktu Sholat Muslim World League
Untuk jadwal waktu shalat, digunakan algoritma yang tercantum dalam situs Praytimes.org. Kriteria penghitungan waktu shalat yang digunakan adalah kriteria Muslim World League, sebagai berikut:
- Waktu asar adalah ketika panjang bayang-bayang sebuah benda sama panjang dengan panjang benda itu.
- Waktu Subuh adalah ketika matahari berada 18° di bawah ufuk
- Waktu Isya adalah ketika matahari berada 17° di bawah ufuk.
Perbedaan Awal Syawal 1432 H
Dari uraian di atas, untuk tahun 1432 H ini kriteria Imkanur Rukyat menghitung jumlah hari Ramadhan sebanyak 30 hari, sedangkan kriteria Wujudul Hilal menghitung jumlah hari Ramadhan sebanyak 29 hari.
Perbedaan ini muncul dari perbedaan kriteria yang digunakan dalam menghitung masuknya awal bulan Hijriah. Kedua metode yang digunakan, Imkanur Rukyat dan Wujudul Hilal, sama-sama memiliki landasan pengetahuan dan syariat yang kuat dan dapat dipertanggungjawabkan. Karena kedua metode ini sama-sama memiliki landasan ilmiah yang dapat dipertanggungjawabkan, maka bukanlah pada tempatnya jika kita saling menyalahkan satu sama lain dengan munculnya perbedaan ini.
Bagi kita yang menjalankan ibadah shaum tahun ini, satu hal yang penting diperhatikan adalah menetapkan niat dalam hati agar ibadah shaum dan ibadah-ibadah lain yang kita jalankan sepanjang satu bulan diterima Allah, terlepas dari apakah kita melaksanakan shaum 29 hari atau 30 hari. Jika kita yakin dengan kriteria Imkanur Rukyat, jalani shaum sebanyak 30 hari. Jika kita yakin dengan kriteria Wujudul Hilal, jalan shaum sebanyak 29 hari.
Wednesday, June 15, 2011
Program Konversi Kalender Masehi-Hijriyah (versi Python)
Update 31 Desember 2012: Program executable diulas dalam artikel ini.
Update 12 Mei 2012: Kode program versi QBasic dan Python di-share di pastebin oleh Cindy Wijaya.
Dalam blognya, prof. Thomas Djamaluddin, seorang staf LAPAN RI, memposting sebuah program kecil untuk menghitung konversi tanggal antara sistem kalender Masehi dengan sistem kalender Hijriyah dan sebaliknya. Berikut ini versi sadurannya dalam bahasa pemrograman Python. Makalah prof. Thomas tentang program konversi ini dapat diunduh di sini.
Semoga bermanfaat.
Update 12 Mei 2012: Kode program versi QBasic dan Python di-share di pastebin oleh Cindy Wijaya.
Dalam blognya, prof. Thomas Djamaluddin, seorang staf LAPAN RI, memposting sebuah program kecil untuk menghitung konversi tanggal antara sistem kalender Masehi dengan sistem kalender Hijriyah dan sebaliknya. Berikut ini versi sadurannya dalam bahasa pemrograman Python. Makalah prof. Thomas tentang program konversi ini dapat diunduh di sini.
Semoga bermanfaat.
Monday, May 16, 2011
Perbedaan Hari Raya
Perbedaan Hari Raya seringkali terjadi. Membingungkan. Betulkah membingungkan? Apa sih yang sebetulnya membuat bingung?
Misalkan saja besok (relatif terhadap saat ketika tulisan ini dibuat) tanggal 17 Mei 2011, bertepatan dengan tanggal 1 Ramadhan 1432. Misal, sekali lagi, misalkan. Ini cuma contoh.
Coba pikirkan baik-baik, apa kenapa kita gunakan kata "bertepatan" pada kalimat di atas? Apa sih yang sebetulnya bertepatan? Apakah ketika tanggal di kalender berganti dari 16 Mei menjadi 17 Mei, kalender Hijriah juga ikut berganti dari tanggal 29 Sya'ban menjadi 1 Ramadhan?
Pikirkan baik-baik. Kapan sebetulnya pergantian hari dalam sistem kalender Hijriah terjadi? Apakah sama dengan pergantian hari dalam sistem kalender Masehi?
Kedua, terkait dengan perbedaan hari. Ketika di Indonesia tanggal 17 Mei 2011, misalkan saja pada saat waktu menunjukkan pukul 08.00 pagi Waktu Indonesia bagian Barat (WIB), kalender Masehi mengatakan hari itu hari Selasa.
Pikirkan baik-baik kenyataan berikut ini: Pada saat yang sama, ketika di Indonesia waktu menunjukkan pukul 08.00 WIB, hari Selasa tanggal 17 Mei 2011, di New York, Amerika Serikat, apakah waktu kalender menunjukkan hari Selasa juga? Kenapa bisa berbeda, nyatanya pada saat yang sama di New York "masih" hari Senin, tanggal 16 Mei 2011.
Padahal saatnya sama, detik itu juga. Jika ada dua orang yang melakukan chatting, pesan yang mereka kirim dan terima bukan berarti mengalami penundaan (delay) selama satu hari bukan? Di saat orang Indonesia mengetik pesan, pesan itu ditulisnya pada hari Selasa, dan diterima oleh rekannya di New York pada hari Senin.
Ketiga. Masih tentang perbedaan hari raya. Jika di Indonesia orang-orang merayakan hari Natal, 25 Desember 2011. Sebagian orang merayakannya dengan menghadiri misa natal pada pukul 00.00 WIB, tanggal 25 Desember 2011. Pikirkan baik-baik: Apakah pada saat yang sama, saudara-saudara mereka di New York, sudah merayakan hari raya Natal?
Kenapa ada perbedaan? Kenapa? Mengapa?
Dan terakhir, jika di New York, Hilal yang menandakan masuknya bulan Ramadhan sudah bisa terlihat pada saat senja, ketika matahari terbenam ketika seruan sholat Maghrib berkumandang di sana. Apakah di Indonesia kemudian harus melangsungkan sholat tarawih? Padahal ada perbedaan waktu 12 jam antara Indonesia bagian Barat (WIB) dengan kota New York.
Dua belas jam sebelumnya, ketika orang-orang di Indonesia mencoba merukyat Hilal, sang Hilal masih malu-malu menampakkan diri, karena jarak yang masih terlalu dekat dengan matahari sehingga sangat mustahil terlihat. Karena belum bisa melihat Hilal, orang-orang di Indonesia masih meneruskan bulan Sya'ban, dan menetapkan bulan Ramadhan belum masuk. Padahal, dari tiga pemikiran sebelumnya di atas, seharusnya Indonesia "lebih dulu" masuk hari Selasa dibandingkan New York yang "masih" hari Senin. Tapi orang-orang di New York sudah mulai melakukan shalat tarawih, pada hari Senin malam. Sementara di Indonesia hari Selasa pagi mereka bangun untuk sholat Subuh, masih belum sempat sahur untuk melaksanakan ibadah shaum Ramadhan.
Cobalah renungkan baik-baik.
![]() |
| sumber: Islamic Crescents' Observation Project (ICOP) |
Misalkan saja besok (relatif terhadap saat ketika tulisan ini dibuat) tanggal 17 Mei 2011, bertepatan dengan tanggal 1 Ramadhan 1432. Misal, sekali lagi, misalkan. Ini cuma contoh.
Coba pikirkan baik-baik, apa kenapa kita gunakan kata "bertepatan" pada kalimat di atas? Apa sih yang sebetulnya bertepatan? Apakah ketika tanggal di kalender berganti dari 16 Mei menjadi 17 Mei, kalender Hijriah juga ikut berganti dari tanggal 29 Sya'ban menjadi 1 Ramadhan?
Pikirkan baik-baik. Kapan sebetulnya pergantian hari dalam sistem kalender Hijriah terjadi? Apakah sama dengan pergantian hari dalam sistem kalender Masehi?
Kedua, terkait dengan perbedaan hari. Ketika di Indonesia tanggal 17 Mei 2011, misalkan saja pada saat waktu menunjukkan pukul 08.00 pagi Waktu Indonesia bagian Barat (WIB), kalender Masehi mengatakan hari itu hari Selasa.
Pikirkan baik-baik kenyataan berikut ini: Pada saat yang sama, ketika di Indonesia waktu menunjukkan pukul 08.00 WIB, hari Selasa tanggal 17 Mei 2011, di New York, Amerika Serikat, apakah waktu kalender menunjukkan hari Selasa juga? Kenapa bisa berbeda, nyatanya pada saat yang sama di New York "masih" hari Senin, tanggal 16 Mei 2011.
Padahal saatnya sama, detik itu juga. Jika ada dua orang yang melakukan chatting, pesan yang mereka kirim dan terima bukan berarti mengalami penundaan (delay) selama satu hari bukan? Di saat orang Indonesia mengetik pesan, pesan itu ditulisnya pada hari Selasa, dan diterima oleh rekannya di New York pada hari Senin.
Ketiga. Masih tentang perbedaan hari raya. Jika di Indonesia orang-orang merayakan hari Natal, 25 Desember 2011. Sebagian orang merayakannya dengan menghadiri misa natal pada pukul 00.00 WIB, tanggal 25 Desember 2011. Pikirkan baik-baik: Apakah pada saat yang sama, saudara-saudara mereka di New York, sudah merayakan hari raya Natal?
Kenapa ada perbedaan? Kenapa? Mengapa?
Dan terakhir, jika di New York, Hilal yang menandakan masuknya bulan Ramadhan sudah bisa terlihat pada saat senja, ketika matahari terbenam ketika seruan sholat Maghrib berkumandang di sana. Apakah di Indonesia kemudian harus melangsungkan sholat tarawih? Padahal ada perbedaan waktu 12 jam antara Indonesia bagian Barat (WIB) dengan kota New York.
Dua belas jam sebelumnya, ketika orang-orang di Indonesia mencoba merukyat Hilal, sang Hilal masih malu-malu menampakkan diri, karena jarak yang masih terlalu dekat dengan matahari sehingga sangat mustahil terlihat. Karena belum bisa melihat Hilal, orang-orang di Indonesia masih meneruskan bulan Sya'ban, dan menetapkan bulan Ramadhan belum masuk. Padahal, dari tiga pemikiran sebelumnya di atas, seharusnya Indonesia "lebih dulu" masuk hari Selasa dibandingkan New York yang "masih" hari Senin. Tapi orang-orang di New York sudah mulai melakukan shalat tarawih, pada hari Senin malam. Sementara di Indonesia hari Selasa pagi mereka bangun untuk sholat Subuh, masih belum sempat sahur untuk melaksanakan ibadah shaum Ramadhan.
Cobalah renungkan baik-baik.
Wednesday, May 11, 2011
Sorting by Reversals
Diberikan sebuah barisan, untuk sederhananya, barisan bilangan bulat. Misalnya:
\[ A = 1, 6, 7, 4, 2, 5, 8, 3, 9, 0 \]
Sejatinya barisan bilangan seperti $A$ di atas bisa dikatakan sebagai sebuah permutasi dari barisan bilangan $B$ seperti ini:
\[B = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 \]
Salah satu masalah yang sering diajukan berkaitan dengan sederetan data seperti ini adalah bagaimana caranya agar deretan data permutasi ini bisa dijadikan sebuah deretan bilangan berurut. Pada contoh di atas, bagaimana caranya mengubah permutasi $A$ menjadi sebuah permutasi berurut $B$. Permutasi berurut seperti yang ditunjukkan oleh barisan $B$ kadang disebut juga sebagai permutasi identitas.
Ada banyak algoritma komputasi yang bisa digunakan untuk memecahkan masalah ini. Beberapa di antaranya misalnya bubble sort, insertion sort, selection sort, quick sort, merge sort. Salah satu teknik yang jarang dibahas namun mudah dipahami adalah dengan menggunakan operasi pembalikan (reversal) terhadap sub-barisan.
Sebelum membahas sub-barisan dan bagaimana membalik sub-barisan pada sebuah permutasi data, kita definisikan dulu posisi dari setiap elemen yang terdapat di dalam permutasi yang diberikan.
Setiap elemen pada sebuah permutasi data dimulai dari posisi paling kiri dengan posisi nomor $1$. Seterusnya ke kanan elemen-elemen berikutnya akan menempati posisi $2$, $3$, dan seterusnya hingga posisi ke-$n$.
Sub-barisan $M_{i,j}$ merujuk pada elemen-elemen pada permutasi data $M$ yang menempati posisi ke-$i$ hingga posisi ke-$j$, inklusif. Sebagai contoh pada barisan $A$ di atas, posisi $A_{1}$ hingga $A_{3}$ adalah sebuah sub-barisan.
\[A_{1,3} = 1, 6, 7 \]
Dengan menggunakan pemahaman akan permutasi, permutasi identitas, posisi, dan sub-barisan, kita bisa mulai membahas bagaimana melakukan pengurutan data dengan pembalikan (Sorting by Reversals).
Perhatikan barisan $A$ di atas (diulang berikut ini agar lebih mudah):
\[ A = 1, 6, 7, 4, 2, 5, 8, 3, 9, 0 \]
Jika kita menginginkan data-data pada barisan $A$ terurut, maka kita harus memindahkan data pada posisi ke-$10$ yaitu $0$, ke posisi pertama. Berdasarkan intuisi ini, maka kita perlu membalik sub-barisan $A_{1,10}$ agar $0$ bisa menempati posisi pertama.
\[ A_{a} = \underline{1, 6, 7, 4, 2, 5, 8, 3, 9, 0} \]
\[ A_{b} = \underline{0, 9, 3, 8, 5, 2, 4, 7, 6, 1} \]
Barisan $A_{b}$ menyisakan $9$ data lain yang masih belum berada pada posisi yang benar. Data berikutnya yang harus dipindahkan agar barisan $A_{b}$ semakin mendekati ke permutasi identitas adalah $1$ yang pada contoh ini kebetulan berada pada posisi ke-$10$. Maka sub-barisan $A_{b}$ dari posisi $1$ hingga posisi $10$ dibalik sehingga mendapatkan permutasi data yang baru:
\[ A_{b} = 0, \underline{9, 3, 8, 5, 2, 4, 7, 6, 1} \]
\[ A_{c} = 0, \underline{1, 6, 7, 4, 2, 5, 8, 3, 9} \]
Langkah iterasi berikutnya adalah memindahkan data $2$ ke tempat yang benar. Pada iterasi kali ini, hanya sub-barisan dari posisi $3$ hingga posisi $6$ saja yang perlu dibalik.
\[ A_{c} = 0, 1, \underline{6, 7, 4, 2}, 5, 8, 3, 9 \]
\[ A_{d} = 0, 1, \underline{2, 4, 7, 6}, 5, 8, 3, 9 \]
Demikian seterusnya iterasi dilakukan sehingga didapatkan sebuah permutasi identitas.
\[ A_{d} = 0, 1, 2, \underline{4, 7, 6, 5, 8, 3}, 9 \]
\[ A_{e} = 0, 1, 2, 3, \underline{8, 5, 6, 7, 4}, 9 \]
\[ A_{f} = 0, 1, 2, 3, 4, \underline{7, 6, 5}, 8, 9 \]
\[ A_{g} = 0, 1, 2, 3, 4, \underline{5, 6, 7}, 8, 9 \]
Subscribe to:
Posts (Atom)
