Rekomendasi -Solved Problems di Platform Kompetisi Pemrograman Menggunakan Recommendation Engine
1
BAB 1
PENDAHULUAN
1.1.
Latar Belakang
Competitive programming merupakan terminologi untuk berbagai jenis kompetisi di
bidang pemrograman. Kompetisi pemrograman ini bertujuan untuk menyelesaikan
masalah-masalah dunia nyata yang solusinya dapat dimodelkan secara matematika dan
algoritmik dan memrogramnya dalam bahasa pemrograman yang ditentukan
berdasarkan aturan masing-masing kompetisi.
Soal-soal kompetisi pemrograman ini biasanya terdiri dari bagian-bagian seperti
deskripsi masalah yang harus diselesaikan, format masukan program, dan hasil keluaran
yang diharapkan (deskripsi soal, batas input/output sudah ditentukan). Kontestan harus
menyelesaikannya dengan membuat program sebagai solusi dan melakukan submission
ke dalam sistem kompetisi. Solusi ini kemudian melalui tahap system grading dengan
pengujian berbagai test data dari panitia sebagai syarat apakah solusi program kontestan
benar menurut aturan lomba yang telah didefinisikan. Adapun hasil keluaran yang
ditampilkan dari proses ini adalah accepted (sebagai tanda program yang dikumpulkan
benar, wrong answer (jawaban tidak sesuai dengan aturan input/output yang
diharapkan), time limit exceeded (program melebihi waktu eksekusi komputer server
yang sudah ditetapkan sebelumnya), dan berbagai peringatan lain.
Kompetisi pemrograman ini (ACM ICPC-based) merupakan kompetisi yang
cukup bergengsi di bidang ilmu komputer dan di disiplin ilmu sejenis. Setiap tahunnya
pelajar-pelajar di universitas terbaik di belahan dunia berlomba-lomba mempersiapkan
Universitas Sumatera Utara
2
diri untuk bisa lolos sampai ke tahap final. Tentunya karena disiplin ilmu ini sangat ketat
dan kompetitif, diperlukan investasi waktu yang tidak sedikit untuk masa persiapannya.
Sering kali pelajar-pelajar mengalami kesulitan untuk memulai dari mana agar
bisa menguasai topik-topik yang akan diujikan. Salah satu tempat berlatih untuk
mengasah kemampuan menyelesaikan soal adalah dengan menyelesaikan arsip soalsoal kompetisi terdahulu yang ada di sistem online judges seperti UVa Online Judges,
Sphere Online Judges, Live Archive, Top Coder, dan lain-lain. Bagi pemula, sering kali
ketika mencoba berlatih dan menyelesaikan soal di platform ini merasa sangat frustasi
dan membosankan karena tidak tahu soal mana yang terlebih dahulu diselesaikan, mana
yang lebih mudah, atau mana yang sesuai dengan kemampuannya saat itu (Lin, et al.
2013). Oleh karena itu, penulis melakukan penelitian untuk membuat satu
complementary tool yang bisa merekomendasikan soal-soal yang akan dipakai berlatih.
Penelitian tentang rekomendasi soal-soal yang akan diselesaikan untuk berlatih
dalam kompetisi pemrograman ini sudah pernah dilakukan sebelumnya. Di antaranya
adalah uHunt (Halim, 2010). Tools ini menggunakan pendekatan rekomendasi
berdasarkan preferensi soal-soal apa saja yang sudah diselesaikan seseorang dan
merekomendasikan soal-soal apa yang akan diselesaikan. Kemudian soal-soal
dikategorikan dalam berbagai topik, level soal, dan lain-lain.
Dalam penelitian ini, soal-soal pemrograman yang direkomendasikan berasal
dari platform UVa online judge. Soal-soal yang tersedia berasal dari arsip-arsip
kompetisi tahun-tahun sebelumnya di berbagai level kompetisi. Prinsip kerja mesin
rekomendasi ini adalah dengan merekomendasikan soal-soal apa yang paling dekat
(secara topik, tingkat kesulitan) untuk diselesaikan kemudian. Rekomendasi ini didapat
dengan dua cara. Pertama, dengan mempelajari preferensi soal-soal yang sudah
dikerjakan sebelumnya dengan menggunakan akun terdaftar di UVa online judge.
Kedua, untuk pengguna yang sama sekali tidak memiliki akun terdaftar atau belum
pernah menyelesaikan satu soalpun di sistem kompetisi, rekomendasi bisa didapat
dengan menampilkan halaman kepada pengguna yang berisi topik-topik soal apa yang
ingin dikerjakan terlebih dahulu. Kemudian sistem merekomendasikan mulai dari level
paling mudah bertahap hingga level sulit berdasarkan tingkat preferensi pengguna.
Universitas Sumatera Utara
3
1.2.
Rumusan Masalah
Competitive programming, dalam proses persiapannya membutuhkan olah mental,
pikiran, dan waktu yang panjang. Tingkat kesulitan soal-soal yang diujikan saat
kompetisi sangat tinggi dan dalam perkembangannya bervariasi pada lingkup masalahmasalah nyata yang penyelesaiannya menggunakan pemodelan matematika dan solusisolusi algoritmik. Oleh karena itu, rekomendasi next-solved problems ini dapat
membantu dan mempermudah proses persiapan peserta dengan membuat basis
roadmap tracking of competitive programming.
1.3.
Tujuan Penelitian
Tujuan penelitian ini adalah memberikan rekomendasi next-solved problems pada
platform online judge dan mengelompokkan berbagai soal-soal dalam tingkat kesulitan,
maupun kategori teknik penyelesaian soal untuk memudahkan pengguna dalam
menyelesaikan masalah-masalah yang ada di level kompetisi.
1.4.
Manfaat Penelitian
Adapun manfaat dilakukannya penelitian ini:
1.
Sebagai
tool
alternatif
bagi
pelajar/mahasiswa
yang
ingin
mempersiapkan diri dalam kompetisi pemrograman tingkat lanjut
2.
Sebagai rekam jejak (roadmap tracking) untuk mencatat perkembangan
belajar dan mengasah kemampuan dalam menyelesaikan soal-soal
kompetisi pemrograman.
1.5.
Batasan Masalah
Pada penyusunan tugas akhir ini, ruang lingkup pembahasan mencakup:
1.
Platform soal-soal kompetisi yang digunakan dibatasi pada platform UVa
online judge.
Universitas Sumatera Utara
4
2.
Dataset yang digunakan merupakan arsip soal-soal di online judge
rentang tahun 1995-2014 (UVA, 2014).
1.6.
Metodologi Penelitian
Dataset yang penulis gunakan pada penelitian ini diambil dari UVa online judge dimana
jumlah arsip soal yang tersedia sekitar 4500+ problemsets, dengan satu juta pengguna
terdaftar dan 500.000+ pengguna aktif setiap bulannya. Adapun tahapan-tahapan
perancangan tools terdefinisi sebagai berikut:
1.
Studi Literatur
Pada tahapan ini, penulis mengkaji dataset dan teknik yang akan
digunakan melalui studi literatur dan pustaka dengan mengumpulkan
bahan-bahan dan referensi berupa makalah, jurnal, buku, maupun artikel
terkait.
2.
Dataset Crawling
Mengumpulkan preferensi setiap pengguna terdaftar dan meta-data soalsoal yang ada dari ketersediaan tautan dan informasi pengelompokan soalsoal berdasarkan tahun dan deskripsi soal.
3.
Dataset Extraction
Mengelompokkan soal-soal berdasarkan tingkat kesulitan (easy, medium,
hard), topik-topik yang sering dibahas (dynamic programming, ad-hoc,
graph, math, greedy, dan lainnya), juga berdasar pengelompokan metode
ataupun algoritma yang digunakan dalam penyelesaian.
4.
Problemsets Clustering Berdasarkan Preferensi Pengguna
Setelah mendapat informasi dataset soal-soal yang ada, sistem
mengelompokkan soal-soal ke dalam masing-masing kategori ataupun
berdasarkan tagging pada topik soal.
5.
Analisis Permasalahan
Tahapan untuk melakukan analisis permasalahan:
Universitas Sumatera Utara
5
a) meneliti secara detail tahapan dan proses pengolahan dataset
b) meneliti bagaimana proses rekomendasi dalam merekomendasikan
soal-soal dan menentukan setiap level dan kategorinya.
6.
Pengkodean
Tahapan untuk melakukan implementasi kode ke dalam aplikasi
berdasarkan hasil perancangan aplikasi pada tahap sebelumnya.
7.
Pengujian
Tahapan uji coba program untuk memastikan apakah program yang sudah
dibuat berjalan sesuai dengan yang harapkan.
8.
Dokumentasi dan Penyusunan Laporan
Pada tahap ini dilakukan pendokumentasian hasil analisis dan
implementasi.
1.7.
Sistematika Penulisan
Sistematika penulisan skripsi ini dibagi menjadi enam bab yaitu:
BAB I
Pendahuluan
Pada bab ini berisi tentang konsep dasar dan teori pendukung dalam penyusunan skripsi.
BAB II
Landasan Teori
Pada bab ini dibahas mengenai beberapa teori yang mendukung pembahasan pada bab
selanjutnya.
BAB II
Metodologi Penelitian
Pada bab ini dibahas mengenai metodologi penelitian yang digunakan.
BAB IV
Analisis dan Perancangan
Pada bab ini dibahas mengenai permasalahan dalam pembuatan aplikasi, penjelasan
tentang rancangan struktur tools yang akan dibuat.
Universitas Sumatera Utara
6
BAB V
Implementasi dan Pengujian
Pada bab ini dibahas implementasi dari aplikasi yang akan dibuat. Berisikan gambaran
arsitektur umum yang akan dibuat. Setelah itu dilakukan pengujian untuk memastikan
tools yang dibuat berhasil dijalankan atau tidak.
BAB VI
Kesimpulan dan Saran
Bab ini berisi tentang kesimpulan dan saran yang diharapkan dapat bermanfaat untuk
penelitian selanjutnya.
Universitas Sumatera Utara
BAB 1
PENDAHULUAN
1.1.
Latar Belakang
Competitive programming merupakan terminologi untuk berbagai jenis kompetisi di
bidang pemrograman. Kompetisi pemrograman ini bertujuan untuk menyelesaikan
masalah-masalah dunia nyata yang solusinya dapat dimodelkan secara matematika dan
algoritmik dan memrogramnya dalam bahasa pemrograman yang ditentukan
berdasarkan aturan masing-masing kompetisi.
Soal-soal kompetisi pemrograman ini biasanya terdiri dari bagian-bagian seperti
deskripsi masalah yang harus diselesaikan, format masukan program, dan hasil keluaran
yang diharapkan (deskripsi soal, batas input/output sudah ditentukan). Kontestan harus
menyelesaikannya dengan membuat program sebagai solusi dan melakukan submission
ke dalam sistem kompetisi. Solusi ini kemudian melalui tahap system grading dengan
pengujian berbagai test data dari panitia sebagai syarat apakah solusi program kontestan
benar menurut aturan lomba yang telah didefinisikan. Adapun hasil keluaran yang
ditampilkan dari proses ini adalah accepted (sebagai tanda program yang dikumpulkan
benar, wrong answer (jawaban tidak sesuai dengan aturan input/output yang
diharapkan), time limit exceeded (program melebihi waktu eksekusi komputer server
yang sudah ditetapkan sebelumnya), dan berbagai peringatan lain.
Kompetisi pemrograman ini (ACM ICPC-based) merupakan kompetisi yang
cukup bergengsi di bidang ilmu komputer dan di disiplin ilmu sejenis. Setiap tahunnya
pelajar-pelajar di universitas terbaik di belahan dunia berlomba-lomba mempersiapkan
Universitas Sumatera Utara
2
diri untuk bisa lolos sampai ke tahap final. Tentunya karena disiplin ilmu ini sangat ketat
dan kompetitif, diperlukan investasi waktu yang tidak sedikit untuk masa persiapannya.
Sering kali pelajar-pelajar mengalami kesulitan untuk memulai dari mana agar
bisa menguasai topik-topik yang akan diujikan. Salah satu tempat berlatih untuk
mengasah kemampuan menyelesaikan soal adalah dengan menyelesaikan arsip soalsoal kompetisi terdahulu yang ada di sistem online judges seperti UVa Online Judges,
Sphere Online Judges, Live Archive, Top Coder, dan lain-lain. Bagi pemula, sering kali
ketika mencoba berlatih dan menyelesaikan soal di platform ini merasa sangat frustasi
dan membosankan karena tidak tahu soal mana yang terlebih dahulu diselesaikan, mana
yang lebih mudah, atau mana yang sesuai dengan kemampuannya saat itu (Lin, et al.
2013). Oleh karena itu, penulis melakukan penelitian untuk membuat satu
complementary tool yang bisa merekomendasikan soal-soal yang akan dipakai berlatih.
Penelitian tentang rekomendasi soal-soal yang akan diselesaikan untuk berlatih
dalam kompetisi pemrograman ini sudah pernah dilakukan sebelumnya. Di antaranya
adalah uHunt (Halim, 2010). Tools ini menggunakan pendekatan rekomendasi
berdasarkan preferensi soal-soal apa saja yang sudah diselesaikan seseorang dan
merekomendasikan soal-soal apa yang akan diselesaikan. Kemudian soal-soal
dikategorikan dalam berbagai topik, level soal, dan lain-lain.
Dalam penelitian ini, soal-soal pemrograman yang direkomendasikan berasal
dari platform UVa online judge. Soal-soal yang tersedia berasal dari arsip-arsip
kompetisi tahun-tahun sebelumnya di berbagai level kompetisi. Prinsip kerja mesin
rekomendasi ini adalah dengan merekomendasikan soal-soal apa yang paling dekat
(secara topik, tingkat kesulitan) untuk diselesaikan kemudian. Rekomendasi ini didapat
dengan dua cara. Pertama, dengan mempelajari preferensi soal-soal yang sudah
dikerjakan sebelumnya dengan menggunakan akun terdaftar di UVa online judge.
Kedua, untuk pengguna yang sama sekali tidak memiliki akun terdaftar atau belum
pernah menyelesaikan satu soalpun di sistem kompetisi, rekomendasi bisa didapat
dengan menampilkan halaman kepada pengguna yang berisi topik-topik soal apa yang
ingin dikerjakan terlebih dahulu. Kemudian sistem merekomendasikan mulai dari level
paling mudah bertahap hingga level sulit berdasarkan tingkat preferensi pengguna.
Universitas Sumatera Utara
3
1.2.
Rumusan Masalah
Competitive programming, dalam proses persiapannya membutuhkan olah mental,
pikiran, dan waktu yang panjang. Tingkat kesulitan soal-soal yang diujikan saat
kompetisi sangat tinggi dan dalam perkembangannya bervariasi pada lingkup masalahmasalah nyata yang penyelesaiannya menggunakan pemodelan matematika dan solusisolusi algoritmik. Oleh karena itu, rekomendasi next-solved problems ini dapat
membantu dan mempermudah proses persiapan peserta dengan membuat basis
roadmap tracking of competitive programming.
1.3.
Tujuan Penelitian
Tujuan penelitian ini adalah memberikan rekomendasi next-solved problems pada
platform online judge dan mengelompokkan berbagai soal-soal dalam tingkat kesulitan,
maupun kategori teknik penyelesaian soal untuk memudahkan pengguna dalam
menyelesaikan masalah-masalah yang ada di level kompetisi.
1.4.
Manfaat Penelitian
Adapun manfaat dilakukannya penelitian ini:
1.
Sebagai
tool
alternatif
bagi
pelajar/mahasiswa
yang
ingin
mempersiapkan diri dalam kompetisi pemrograman tingkat lanjut
2.
Sebagai rekam jejak (roadmap tracking) untuk mencatat perkembangan
belajar dan mengasah kemampuan dalam menyelesaikan soal-soal
kompetisi pemrograman.
1.5.
Batasan Masalah
Pada penyusunan tugas akhir ini, ruang lingkup pembahasan mencakup:
1.
Platform soal-soal kompetisi yang digunakan dibatasi pada platform UVa
online judge.
Universitas Sumatera Utara
4
2.
Dataset yang digunakan merupakan arsip soal-soal di online judge
rentang tahun 1995-2014 (UVA, 2014).
1.6.
Metodologi Penelitian
Dataset yang penulis gunakan pada penelitian ini diambil dari UVa online judge dimana
jumlah arsip soal yang tersedia sekitar 4500+ problemsets, dengan satu juta pengguna
terdaftar dan 500.000+ pengguna aktif setiap bulannya. Adapun tahapan-tahapan
perancangan tools terdefinisi sebagai berikut:
1.
Studi Literatur
Pada tahapan ini, penulis mengkaji dataset dan teknik yang akan
digunakan melalui studi literatur dan pustaka dengan mengumpulkan
bahan-bahan dan referensi berupa makalah, jurnal, buku, maupun artikel
terkait.
2.
Dataset Crawling
Mengumpulkan preferensi setiap pengguna terdaftar dan meta-data soalsoal yang ada dari ketersediaan tautan dan informasi pengelompokan soalsoal berdasarkan tahun dan deskripsi soal.
3.
Dataset Extraction
Mengelompokkan soal-soal berdasarkan tingkat kesulitan (easy, medium,
hard), topik-topik yang sering dibahas (dynamic programming, ad-hoc,
graph, math, greedy, dan lainnya), juga berdasar pengelompokan metode
ataupun algoritma yang digunakan dalam penyelesaian.
4.
Problemsets Clustering Berdasarkan Preferensi Pengguna
Setelah mendapat informasi dataset soal-soal yang ada, sistem
mengelompokkan soal-soal ke dalam masing-masing kategori ataupun
berdasarkan tagging pada topik soal.
5.
Analisis Permasalahan
Tahapan untuk melakukan analisis permasalahan:
Universitas Sumatera Utara
5
a) meneliti secara detail tahapan dan proses pengolahan dataset
b) meneliti bagaimana proses rekomendasi dalam merekomendasikan
soal-soal dan menentukan setiap level dan kategorinya.
6.
Pengkodean
Tahapan untuk melakukan implementasi kode ke dalam aplikasi
berdasarkan hasil perancangan aplikasi pada tahap sebelumnya.
7.
Pengujian
Tahapan uji coba program untuk memastikan apakah program yang sudah
dibuat berjalan sesuai dengan yang harapkan.
8.
Dokumentasi dan Penyusunan Laporan
Pada tahap ini dilakukan pendokumentasian hasil analisis dan
implementasi.
1.7.
Sistematika Penulisan
Sistematika penulisan skripsi ini dibagi menjadi enam bab yaitu:
BAB I
Pendahuluan
Pada bab ini berisi tentang konsep dasar dan teori pendukung dalam penyusunan skripsi.
BAB II
Landasan Teori
Pada bab ini dibahas mengenai beberapa teori yang mendukung pembahasan pada bab
selanjutnya.
BAB II
Metodologi Penelitian
Pada bab ini dibahas mengenai metodologi penelitian yang digunakan.
BAB IV
Analisis dan Perancangan
Pada bab ini dibahas mengenai permasalahan dalam pembuatan aplikasi, penjelasan
tentang rancangan struktur tools yang akan dibuat.
Universitas Sumatera Utara
6
BAB V
Implementasi dan Pengujian
Pada bab ini dibahas implementasi dari aplikasi yang akan dibuat. Berisikan gambaran
arsitektur umum yang akan dibuat. Setelah itu dilakukan pengujian untuk memastikan
tools yang dibuat berhasil dijalankan atau tidak.
BAB VI
Kesimpulan dan Saran
Bab ini berisi tentang kesimpulan dan saran yang diharapkan dapat bermanfaat untuk
penelitian selanjutnya.
Universitas Sumatera Utara