Apa itu Berpikir Komputasional?




Melalui Berpikir komputasional (BK), kalian akan berlatih berpikir seperti seorang ilmuwan Informatika, bukan berpikir seperti komputer karena komputer adalah mesin. Kegiatan utama dalam BK ialah penyelesaian masalah (problem solving), untuk menemukan solusi yang efisien, efektif, dan optimal sehingga solusinya bisa dijalankan oleh manusia maupun mesin. Dengan kata lain, kegiatan  dalam BK ialah mencari strategi untuk mengatasi persoalan. Persoalan apa  yang akan diselesaikan? Sebetulnya, hampir semua persoalan sehari-hari mengandung konsep komputasi sehingga bisa diselesaikan dengan bantuan mesin komputer. Sebagai contoh, robot yang bertugas melayani penjualan di restoran atau mengantar makanan dan obat untuk pasien di rumah sakit yang  sudah dipakai di beberapa negara maju, sistem komputer untuk memantau perkebunan sawit yang siap panen dan sebagainya. Sistem komputer pada pada hakikatnya meniru dunia ini untuk dijadikan dunia digital sehingga bisa membantu atau menggantikan manusia dalam melakukan pekerjaanpekerjaan yang sulit maupun membosankan.

  1. Abstraksi, yaitu menyarikan bagian penting dari suatu permasalahan dan  mengabaikan yang tidak penting  sehingga memudahkan fokus kepada solusi.
  2. Algoritma, yaitu menuliskan otomasi solusi melalui berpikir algoritmik (langkah-langkah yang terurut) untuk mencapai suatu tujuan (solusi). Jika langkah yang runtut ini diberikan ke komputer dalam bahasa yang dipahami oleh komputer,  kalian akan dapat “memerintah” komputer  mengerjakan langkah tersebut.
  3. Dek omposisi dan formulasi persoalan  sedemikian rupa sehingga dapat diselesaikan dengan cepat dan efisien serta optimal dengan menggunakan komputer sebagai alat bantu. Persoalan yang sulit apalagi besar  akan menjadi mudah jika diselesaikan sebagian-sebagian secara sistematis.
  4. Pengenalan pola persoalan, generalisasi serta mentransfer proses penyelesaian persoalan ke persoalan lain yang sejenis.
BK perlu diasah dengan latihan rutin, mulai dari persoalan sederhana dan kecil. Kemudian, secara bertahap, persoalannya ditingkatkan menjadi makin besar, kompleks, dan rumit. Makin besar dan kompleks suatu persoalan, solusinya makin membutuhkan komputer agar dapat diselesaikan secara efisien. Pada tingkat SD dan SMP, strategi penyelesaian persoalan belum secara khusus dirumuskan dalam bentuk algoritma. Pada tingkat SMA, kalian akan belajar bagaimana caranya agar solusi masalahnya bisa dituliskan dalam bentuk algoritma yang efisien dan siap dibuat menjadi program komputer.

Ruang permasalahan di dunia ini luas sekali, dan tentunya tak seorang pun ingin hidupnya menghadapi persoalan. Setiap bidang juga mempunyai persoalan dari sudut pandang bidang masing-masing, dan akan mengusulkan penyelesaian dengan menggunakan konsep dan prinsip keilmuan bidangnya. Kita belajar dari persoalan-persoalan yang ada dan pernah diusulkan solusinya. Oleh karena itu, belajar penyelesaian persoalan ialah belajar dari kasus-kasus dan solusinya. Namun, persoalan yang dibahas itu perlu di adaptasi dengan konteks kita. Kita perlu membentuk pola persoalan dan pola solusi dari latihan penyelesaiannya. Karena sangat banyak, latihan persoalan perlu dipilih. Topik yang dipilih dalam BK untuk SMA dalam mata pelajaran Informatika merupakan persoalan-persoalan mendasar terkait kehidupan sehari-hari yang perlu dikuasai dan mengandung konsep Informatika yang dominan. Bisa saja persoalan tersebut berkaitan dengan bidang lain, tetapi kita akan fokus ke aspek informatika. Memusatkan penyelesaian persoalan dari  satu sudut pandang ini merupakan berpikir kritis! Dengan mempelajari dan membahas latihan-latihan pada unit pembelajaran ini, diharapkan kalian akan mendapatkan dasar pengetahuan yang diperlukan untuk menemukan solusisolusi yang membutuhkan program komputer. Melalui kasus yang dibahas, kalian diharapkan dapat membentuk katalog solusi, yang saat dibutuhkan, akan tinggal dipakai. Melalui kegiatan BK ini, kalian menabung potongan solusi yang kelak dapat dirangkai menjadi pola solusi yang dibutuhkan untuk  persoalan nyata yang dihadapi.

A. Pencarian (Searching)



Hidup adalah pencarian yang tiada henti. Mari, kita berpikir ke pengalaman “mencari” dalam
kehidupan sehari-hari. Perhatikan contoh berikut.
  1. Pernahkah kalian merasa  kebingungan saat mencari sebuah buku di lemari buku  kalian? Atau bahkan di perpustakaan? Saat kalian meminta bantuan  kepada petugas perpustakaan, mengapa dia dapat menemukan buku yang kalian cari dengan waktu yang lebih singkat?
  2. Suatu hari, kalian kehilangan baju seragam yang harus dipakai pada hari itu dan kalian mencarinya. Apa strategi kalian supaya baju tersebut cepat ditemukan?
  3. Kalian mengingat sebuah potongan lirik lagu, tetapi tidak ingat judul lagu tersebut. Bagaimana kalian bisa menemukan lagu tersebut dengan cepat?
Apa itu mencari? Mencari adalah menemukan “sesuatu” yang bisa berupa benda, angka, konsep, informasi yang memenuhi kriteria tertentu dalam suatu ruang pencarian. Masalah pencarian sangat umum ditemukan di dalam kehidupan, termasuk dalam dunia komputasi. Ketika melakukan suatu pencarian, kalian harus menemukan suatu benda atau objek yang memenuhi kriteria tertentu dari sekumpulan benda atau objek lain. Beberapa contoh dari masalah pencarian yang sering kalian temui ialah sebagai berikut.

  1. Mencari buku dengan judul tertentu di rak buku perpustakaan.
  2. Mencari pakaian batik seragam kalian di lemari yang berisi semua pakaian  yang kalian miliki.
  3. Mencari dokumen atau web tertentu dengan mesin pencari seperti Google.

Mencari benda nyata gampang, tinggal kita lihat dan kita cocokkan dengan mata. Namun, mencari informasi atau konsep yang tidak kelihatan?
Hmmmmm… Tidak mudah!


Masalah pencarian dapat dibuat dalam bentuk yang lebih formal agar dapat diterapkan pada banyak kasus. Elemen pada masalah pencarian meliputi hal-hal berikut.

Saat merapikan sesuatu,  misalnya koleksi buku, kita menyusun buku tersebut dengan menggunakan suatu aturan. Misalnya, jika kita memiliki koleksi buku cerita berseri,  kemungkinan besar kita akan menyusunnya secara berurut dari volume pertama hingga volume yang terbaru. Atau, ketika sedang berbaris, kita diminta untuk membentuk barisan berdasarkan tinggi badan. Hal-hal tersebut  merupakan sebuah proses pengurutan atau sorting. Proses pengurutan akan menjadi bagian yang tidak terpisahkan dari program komputer atau aplikasi yang sering kita gunakan. 
Pada aktivitas ini, kita akan melihat bagaimana  proses pengurutan dapat dilakukan dengan menggunakan berbagai strategi. Pelajarilah strateginya! Pengurutan merupakan suatu permasalahan klasik pada komputasi yang dilakukan untuk mengatur agar suatu kelompok benda, objek, atau entitas diletakkan mengikuti aturan tertentu. Urutan yang paling sederhana misalnya mengurutkan angka secara terurut menaik atau menurun. 
Biasanya, masalah pengurutan terdiri atas sekumpulan objek yang disusun secara acak yang harus diurutkan. Setelah itu, secara sistematis, posisi objek diperbaiki dengan melakukan pertukaran posisi dua buah objek. Hal ini  dilakukan secara terus-menerus hingga semua posisi objek benar. 
Misal, kita memperoleh 5 buah angka acak berikut:
Kita dapat membuat angka tersebut terurut menaik dengan melakukan satu kali pertukaran, yaitu dengan menukar nilai 4 dengan nilai 3. Terdapat 2 langkah penting dalam melakukan sebuah pengurutan. Langkah pertama ialah melakukan pembandingan. Untuk melakukan pengurutan, dipastikan ada dua buah nilai yang dibandingkan. Pembandingan ini akan menghasilkan bilangan yang lebih besar dari, lebih kecil dari, atau memiliki nilai sama dengan sebuah bilangan lainnya. Langkah kedua ialah melakukan penempatan bilangan setelah melakukan pembandingan. Penempatan bilangan ini dilakukan setelah didapatkan bilangan lebih besar atau lebih kecil (bergantung pada pengurutan yang digunakan).
Terdapat beberapa teknik (algoritma) untuk melakukan pengurutan
seperti bubble sort, insertion sort, quick sort, merge sort, dan selection sort.  Pada unit ini, hanya akan diberikan penjelasan untuk setiap tiga teknik ialah sebagai berikut. Teknik lainnya dapat kalian pelajari dari referensi yang diberikan.

1. Insertion Sort

Insertion Sort adalah salah satu algoritma yang digunakan untuk permasalahan pengurutan dalam list (daftar objek). Sesuai namanya, insertion sort  mengurutkan sebuah list dengan cara menyisipkan elemen satu per satu sesuai dengan urutan besar kecilnya elemen hingga semua  elemen menjadi list yang terurut. Misalnya, dalam kasus mengurutkan elemen list dari yang terkecil  hingga terbesar (ascending), tahap pertama ialah kita akan membaca suatu  elemen dengan elemen yang berdekatan. Apabila elemen yang berdekatan dengan elemen saat ini lebih kecil, elemen yang lebih kecil akan ditukar dengan elemen yang lebih besar dan dibandingkan kembali dengan elemen sebelumnya yang sudah terurut. Apabila elemen saat ini sudah lebih besar dari elemen sebelumnya,  iterasi berhenti. Hal ini dijalankan satu per  satu hingga semua  list menjadi teruru

Ilustrasi Insertion Sort 

Terdapat sebuah deret bilangan seperti berikut: 2, 3, 7, 6, 5 yang direpresentasikan dengan menggunakan kartu. Urutkan bilangan tersebut secara menaik dengan menggunakan algoritma insertion sort. 

Proses Iterasi Pertama

Langkah pertama, tinjau bilangan kedua, bandingkan bilangan pertama dan kedua, yaitu 2 dan 3. Didapatkan 2 lebih kecil dari 3, maka urutan bilangan tersebut tetap (2,3).   (2, 3, 7, 6, 5) menjadi (2, 3, 7, 6, 5)

Proses Iterasi Kedua

Pada iterasi selanjutnya, kita mengambil bilangan ketiga, yaitu 7. Lalu bandingkan
dengan bilangan sebelumnya. Karena 3 lebih kecil dari 7,  urutan tetap.
(2, 3, 7, 6, 5) menjadi (2, 3, 7, 6, 5)


Proses Iterasi Ketiga

Pada iterasi selanjutnya, kita mengambil bilangan keempat, yaitu 6. Lalu, bandingkan dengan bilangan sebelumnya. Didapatkan bahwa 7 lebih besar dari 6. Oleh  karena itu, selanjutnya, kita akan membandingkan dengan bilangan-bilangan sebelumnya, lalu menukarnya apabila bilangan tersebut lebih besar. Pertama, kita akan membandingkan 6 dan 7. Apakah 6 lebih kecil dari 7? Karena iya,  kita 
akan menukar 6 dengan 7. Lalu, kita akan membandingkan lagi dengan bilangan  sebelumnya, yaitu 3. Apakah 6 lebih kecil dari 3? Karena 6 tidak lebih kecil dari 3, maka 6 sudah berada pada posisi yang benar, yaitu sebelum 7 dan setelah 3.

Proses memindahkan 6 di antara 3 dan 7 ini biasa disebut penyisipan (insertion)  sehingga nama algoritma ini disebut insertion sort. (2, 3, 7, 6, 5) menjadi (2, 3, 6, 7, 5)

Proses Iterasi Keempat 

Pada iterasi selanjutnya, kita mengambil bilangan kelima, yaitu 5. Didapatkan bahwa 7 lebih besar dari 5. Oleh karena itu, selanjutnya, kita akan membandingkan dengan bilangan-bilangan sebelumnya, lalu menukarnya apabila bilangan tersebut lebih besar. Pertama, kita akan membandingkan 5 dan 6. Apakah 5 lebih kecil dari 6? Karena iya,  kita akan menukar 5 dengan 6. Setelah itu, kita akan mengecek dengan bilangan sebelumnya lagi, yaitu 3. Apakah 5 lebih kecil dari 3? Karena 5 tidak lebih kecil dari 3, maka 5 sudah pada posisi seharusnya, yaitu setelah 3 dan sebelum 6. Terjadi lagi proses penyisipan kartu 5 di antara 3 dan 6.  (2, 3, 6, 7, 5) menjadi (2, 3, 5, 6, 7


3. Selection sort

Selection sort merupakan algoritma pengurutan yang juga cukup sederhana,  dengan algoritma mencari (menyeleksi) bilangan terkecil/terbesar (bergantung pada urut naik atau turun) dari daftar bilangan yang belum terurut dan meletakkannya dalam daftar bilangan baru yang dijaga keterurutannya.
Algoritma ini membagi daftar bilangan menjadi dua bagian, yaitu bagian terurut dan bagian yang belum terurut. Bagian yang terurut di sebelah kiri dan bagian yang belum terurut di sebelah kanan. Awalnya, semua  elemen bilangan dalam daftar ialah bagian yang belum terurut, dan bagian yang terurut kosong. Berikut   langkah-langkah yang terdapat pada algoritma selection sort.
  1. Cari bilangan terkecil yang ada pada bagian belum terurut.
  2. Tukar bilangan tersebut dengan bilangan pertama bagian belum terurut,  lalu masukkan ke bagian terurut.
  3.  Ulangi langkah 1 dan 2 sampai bagian yang belum terurut habis. 
  4. Ilustrasi urut-urutan selection sort dapat dilihat pada tabel berikut.

Secara rinci, algoritma selection sort yang dikaitkan dengan pemrograman dijelaskan sebagai berikut. Terdapat sebuah daftar bilangan tidak terurut seperti berikut: 2, 3, 7, 6, 5. Urutkan bilangan tersebut secara menaik dengan menggunakan algoritma selection sort.

Proses Iterasi Pertama

Data Awal: 

Cari bilangan terkecil di bagian belum terurut: ditemukan 2 sebagai bilangan terkecil.

Tukar bilangan 2 dengan bilangan pertama bagian belum terurut. Geser batas bagian yang sudah terurut ke kanan  sehingga 2 menjadi bagian yang sudah terurut. Dalam ilustrasi ini, angka yang dicetak tebal menunjukkan bilangan yang sudah terurut.


Proses Iterasi Kedua

Cari bilangan terkecil di bagian belum terurut, ditemukan angka 3 sebagai bilangan terkecil.
Tukar bilangan 3 dengan bilangan pertama bagian belum terurut. Geser batas bagian yang sudah terurut ke kanan  sehingga 3 menjadi bagian yang sudah terurut. 

Proses Iterasi Ketiga 

Cari bilangan terkecil di bagian belum terurut, ditemukan angka 5 sebagai  bilangan terkecil.


Tukar bilangan 5 dengan bilangan pertama bagian belum terurut, yaitu 7.  Geser batas bagian yang sudah terurut ke kanan, sehingga 5 menjadi bagian yang sudah terurut.


Proses Iterasi Keempat

Cari bilangan terkecil di bagian belum terurut, ditemukan angka 6 sebagai bilangan terkecil.
Tukar bilangan 6 dengan bilangan pertama bagian belum terurut. Di  bagian akhir, karena data tinggal dua,  setelah proses penukaran, algoritma telah selesai dilaksanakan.

C. Tumpukan (Stack ) dan Antrean (Queue)



Kita akan mempelajari dua buah konsep cara penyimpanan data/ objek dalam sebuah struktur yang akan menentukan urutan pemrosesan data/objek tersebut, yaitu tumpukan (stack) dan antrean (queue). Kedua konsep ini memiliki prosedur yang berbeda dalam menyimpan  dan mengeluarkan data. Kedua  konsep tersebut masing-masing memiliki peranan yang berbeda dan digunakan pada situasi yang berbeda pula.
Bayangkan sebuah loket di sebuah rumah sakit, di mana para pasien yang akan berobat diminta untuk mendaftar lebih dahulu di loket penerimaan serta mengisi formulir pendaftaran. Setelah formulir tersebut diisi, para pasien akan mengembalikan formulir ke loket dan menunggu dipanggil oleh petugas. Kebetulan, di pagi hari, dokter yang bertugas belum datang sehingga para pasien harus menunggu. Ketika sang dokter tiba, petugas loket akan memanggil para pasien satu per satu untuk mendapat layanan.

Perhatikan sekarang bagaimana urutan pasien itu dipanggil oleh petugas
loket.
 
  1. Misalkan, petugas loket menumpuk formulir-formulir tersebut di mana formulir yang baru diterima diletakkan di atas formulir yang sudah diterima sebelumnya, kemudian ketika ketika memanggil pasien, petugas tersebut memanggil dengan urutan mulai dari formulir yang berada di atas tumpukan. Menurut kalian, apakah urutan tersebut adil/sesuai dengan yang diharapkan para pasien? Mengapa?
  2. Bagaimana cara petugas menyusun tumpukan formulir dan/atau cara urutan memanggil para pasien dari tumpukan formulir sedemikian rupa sehingga pasien yang datang dan mengisi formulir lebih dulu, akan dipanggil lebih dulu juga (dan sebaliknya)?
Dalam dunia komputasi/informatika, terkadang, kita perlu untuk menyimpan data/objek dalam suatu urutan tertentu, untuk kemudian/sewaktu-waktu diambil/ dikeluarkan kembali, mungkin untuk diproses lebih lanjut atau untuk tujuantujuan lain. Ada dua cara utama kita dapat melakukan penyimpanan ini.
  1. Antrean (queue): pada metode ini, objek-objek disimpan dalam metode  38 penyimpanan yang berupa sebuah antrean  sehingga objek yang pertama/ lebih dulu datang, juga akan lebih dulu keluar/selesai, layaknya sebuah antrean di loket, pintu masuk, dll. Prinsip ini disebut   prinsip First In First Out (FIFO). Dalam sebuah antrean orang, misalnya, jelas orang yang  pertama datang  akan berada di depan antrean, dan harus menjadi yang  pertama yang mendapat pelayanan.
  2. umpukan (stack): pada metode ini, objek-objek disimpan dalam metode  penyimpanan yang menyerupai sebuah tumpukan (misal: tumpukan piring). Dengan demikian, objek yang pertama/lebih dulu disimpan  justru akan menjadi yang terakhir keluar. Prinsip ini disebut juga  Last In First Out (LIFO). Dalam tumpukan piring, misalnya, piring pertama yang diletakkan  akan berada di posisi paling bawah, dan jika kita ambil piring  satu per satu dari tumpukan itu, tentunya piring yang berada di posisi  paling bawah tersebut akan menjadi yang terakhir diambil.
Baik dalam kehidupan sehari-hari  maupun dalam dunia informatika, kedua konsep urutan penyimpanan data tersebut memiliki peran dan kegunaan masing-masing. Ada permasalahan-permasalahan/situasi di mana antrean (FIFO) lebih cocok digunakan. Sebaliknya, ada juga permasalahanpermasalahan di mana tumpukan (LIFO) lebih tepat diterapkan.