Saya suka bagaimana "Pengantar Algoritma" oleh Cormen et al. menyampaikan pengetahuan. Salah satu alasannya adalah bahwa semuanya ada hubungannya dengan masalah pemrograman dan buku tidak diimplementasikan dalam bahasa pemrograman tertentu. Kemandirian bahasa ini memberikan fokus pada ide-ide secara umum.
Jadi pertanyaan saya adalah, seperti yang tertulis di judul. Apakah setiap masalah pemrograman yang dapat dipecahkan dapat dipecahkan dengan berpikir dengan cara algoritmik ini. Tidak peduli bahasa, bidang apa, dll? Jika ya, beri argumen, berikan argumen!
Saya belum menerapkan banyak program kompleks dengan GUI, AI, Grafik, dll ... Tetapi apakah jenis masalah ini juga masalah memikirkan algoritma yang baik?
algorithms
Wittgenstein
sumber
sumber
Jawaban:
Itu tergantung pada bagaimana Anda mendefinisikan "Masalah Pemrograman".
Dalam proyek dunia nyata, jawabannya jelas TIDAK. Sebagian besar masalah bahkan bukan masalah teknis, tetapi masalah komunikasi, persyaratan yang tidak jelas, dll.
Kemudian Anda memiliki seluruh mata pelajaran dari kelas masalah yang memerlukan hampir tanpa algoritma. Sebagai contoh, GUI sering langsung ke "program", tetapi masalah sebenarnya yang terlibat adalah memiliki desain yang baik (dari sudut pandang kegunaan, bukan hanya tampilan grafis).
Ada beberapa bidang, di mana masalahnya cenderung jauh lebih algoritmik oleh sifat bidang itu. Sebagai contoh, AI adalah subjek utama, di mana algoritma berada pada intinya. Grafik dapat berupa algoritma yang intensif, tetapi tergantung pada apa yang dimaksud dengan "Pemrograman Grafik".
Secara umum, jika masalah yang Anda selesaikan secara terprogram cocok untuk representasi matematis, maka Anda memasuki area algoritmik. Tentu saja, ini hanya indikator kasar, karena Anda dapat membuat model matematika untuk hampir semua hal. Tetapi untuk sebagian besar hal yang biasanya tidak Anda pertimbangkan untuk melakukannya.
Contoh terakhir: Jika masalahnya adalah membuat GUI yang memungkinkan memasukkan data untuk objek bisnis, Anda tidak akan terlalu memikirkan formulasi matematika. Namun, jika masalahnya adalah membuat GUI yang berubah secara dinamis dan merelokasi elemen berdasarkan beberapa nilai penting, Anda lebih mungkin berakhir dengan model matematika dan implementasi algoritmik.
sumber
i++
sebagai tuan baru kami .. erm .. algoritma.Apa yang Anda maksud dengan masalah pemrograman?
Menurut Wikipedia:
yang berarti bahwa pemrograman pada umumnya secara inheren lebih besar daripada menerjemahkan algoritma melalui kode.
Sebagai contoh, masalah pemrograman yang saya miliki saat ini adalah saya harus berurusan dengan kode sumber spaghetti lawas dengan menambahkan tes unit, kemudian refactoring . Ini juga melibatkan menambahkan komentar di tempat yang tepat, menormalkan kapitalisasi nama, dll. Ini tidak ada hubungannya dengan algoritma.
Dengan cara yang sama, banyak tugas pengembang tidak terkait dengan algoritma. Contoh: internasionalisasi. Dengan cara yang sama, banyak aplikasi (CRUD, misalnya) tidak menggunakan terlalu banyak algoritma dalam kode sumbernya (tidak berbicara tentang kode yang mendasari kerangka kerja).
Sekarang, jika Anda mengasumsikan bahwa dalam "masalah pemrograman", "pemrograman" adalah sinonim dari terjemahan algoritma melalui kode, maka ya, secara logis masalah apa pun akan menjadi masalah algoritma:
A × n = B × n
jikaA = B
.sumber
Saya kira jawabannya adalah tegas tidak ada . Algoritma hanya membangun blok dalam keterampilan yang jauh lebih besar.
Saya mendapatkan gelar saya di CS, berspesialisasi dalam AI
Di sana masalah mendasar, setidaknya seperti yang saya lihat, adalah menemukan representasi yang baik untuk informasi. Representasi ini harus mencoba untuk menjadi pasangan yang cocok untuk struktur pengetahuan yang ada di kepala orang, dan harus memfasilitasi jenis manipulasi dan perubahan yang dilakukan pada mereka.
Dalam hal pemrograman sehari-hari, ini berarti masalah mendasarnya adalah mengidentifikasi bahasa-domain-spesifik (DSL) yang tepat untuk situasi yang dihadapi. Ada banyak cara untuk membuat DSL. Pemrograman biasa, di mana kelas, variabel, dan metode didefinisikan sebenarnya membuat DSL karena memungkinkan Anda untuk mengatakan sesuatu (memetakan struktur mental Anda untuk kode) yang Anda tidak bisa mengatakan tanpa mereka.
Algoritma juga penting, tetapi mereka hanya bagian dari cerita.
sumber
Saya kira Anda bisa mengatakan bahwa semua program komputer adalah algoritma, karena Anda meresepkan urutan instruksi untuk mencapai hasil yang diinginkan. Namun, beberapa masalah yang paling sulit tidak dalam mengkomunikasikan suatu program ke komputer, mereka dalam mengkomunikasikan suatu program kepada manusia yang akan menguji dan memodifikasi perangkat lunak.
Dengan kata lain, komputer tidak peduli jika kode Anda benar-benar tidak dapat dipahami manusia. Mereka akan menjalankannya dengan baik. Tantangannya adalah membuat kode cukup jelas sehingga bug apa pun akan menonjol seperti jempol yang sakit.
Menariknya, hal-hal teknis yang saya pelajari di perguruan tinggi tentang algoritma telah lama dikalahkan oleh apa yang saya pelajari sendiri sejak saat itu. Pada titik ini jika saya ingin mendapatkan gelar sarjana ke-3 untuk membantu saya dalam pekerjaan saya, itu akan menjadi komposisi bahasa Inggris.
sumber
Sebagian besar masalah pemrograman sebenarnya masalah administrasi sistem.
Itu semacam jawaban yang sembrono, tetapi saya telah menemukan ini benar lebih sering daripada yang diharapkan. Saya tidak tahu berapa kali saya mengalami kegagalan karena DNS salah konfigurasi pada mesin uji, proses basi masih berjalan yang memonopoli CPU / memori / port, program ini berjalan dengan ID pengguna yang salah dan dengan demikian memiliki kesalahan izin, disk dipartisi secara tidak benar dan kehabisan ruang, versi yang salah dari file konfigurasi dipasang, dll.
Mendapatkan algoritma yang benar biasanya hanya sebagian kecil dari masalah. Sisanya adalah menempatkan program untuk bekerja memecahkan masalah nyata di dunia nyata.
sumber
Saya akan berpikir bahwa ya, semua masalah pemrograman dapat dipecahkan dengan berpikir secara algoritmik. Lagipula algoritma hanyalah seperangkat instruksi yang memberi tahu komputer apa yang harus dilakukan.
Ambil beberapa contoh dari atas
Dari segi pemrograman dan bahkan desain yang akan mengetahui pola / aturan yang mengarah pada desain GUI yang efektif yang ramah pengguna dan efisien. Aturan-aturan ini direduksi menjadi sebuah algoritma yang jika diikuti akan membantu menghasilkan GUI yang ramah pengguna. Bahkan langkah sebenarnya menempatkan kontrol pada GUI juga dapat direduksi menjadi suatu algoritma
Tetapi cara Anda mendekati menambahkan unit test dapat dijelaskan oleh suatu algoritma seperti
Masalah dengan sebagian besar jawaban Ya adalah bahwa orang-orang berpikir tentang algoritma dalam hal QuickSort, Bubble sort bukannya serangkaian instruksi yang mengurangi deskripsi samar-samar dari masalah menjadi serangkaian logika / aturan yang jelas.
sumber