Ini tentang seberapa efektif kita dapat mengekspresikan suatu algoritma. Saya membutuhkan ini untuk pengajaran sarjana saya.
Saya mengerti tidak ada yang namanya cara standar untuk menulis kode semu. Penulis yang berbeda mengikuti konvensi yang berbeda.
Akan sangat membantu jika orang-orang di sini menunjukkan, cara mereka mengikuti dan berpikir yang terbaik.
Apakah ada buku yang membahas hal ini dengan sangat baik?
ds.algorithms
soft-question
advice-request
writing
pengguna3162
sumber
sumber
Jawaban:
Menulis pseudocode seperti menulis kode: Ini tidak terlalu penting standar mana yang Anda ikuti, selama Anda (dan orang-orang yang menulis dengan Anda) benar-benar mengikuti beberapa standar.
Tetapi sebagai catatan, inilah standar istimewa yang saya gunakan dalam catatan kuliah, makalah penelitian, dan buku saya yang akan datang.
Gunakan sintaks imperatif standar untuk aliran kontrol dan akses memori - jika, sementara, untuk, kembali, array [indeks], fungsi (argumen). Tuliskan "else if".
record.field
ataurecord->field
Gunakan standar notasi matematika untuk matematika - Menulis bukan , sebuah mod b bukan , s ≤ t bukan , bukan , bukan , bukan , bukan , dll .xy amodb s≤t ¬p x−−√ π ∞
x*y
a%b
s <= t
!p
sqrt(x)
PI
MAX_INT
Tetapi gunakan untuk penugasan, untuk menghindari masalah.x←y
==
Tetapi hindari notasi (dan kodesemu!) Sepenuhnya jika bahasa Inggris lebih jelas.
Minimalkan gula sintaksis - Tunjukkan struktur blok dengan indentasi yang konsisten (à la Python). Hapus kata kunci yang manis seperti "mulai / akhir" atau "do / od" atau "fi". Hapus nomor baris. Jangan tidak menekankan kata kunci seperti "untuk" atau "sementara" atau "jika" dengan menetapkan mereka dalam berbagai
typeface
atau gaya . Pernah. Hanya saja, jangan.Tetapi nama-nama algoritma konstanta dan konstanta dalam \ textsc {Small Caps}, nama variabel dalam huruf miring , dan string literal dalam sans serif.
Tetapi tambahkan sedikit ruang "bernapas" vertikal (
\\[0.5ex]
) di antara potongan kode yang bermakna.Jangan menentukan detail yang tidak penting. Jika tidak masalah urutan apa yang Anda kunjungi simpul, cukup katakan "untuk semua simpul".
Sebagai contoh, berikut adalah formulasi rekursif dari algoritma spanning tree minimum Borůvka . Saya sebelumnya telah mendefinisikan sebagai grafik yang diperoleh dari dengan mengontrak semua tepi di set , dan Ratakan sebagai subrutin yang menghilangkan loop dan tepi paralel.G/L G L
Saya menggunakan
algorithm
lingkungan LaTeX ringan saya sendiri untuk mengeset pseudocode. (Ini hanyatabbing
lingkungan di dalam\fbox
.) Berikut kode sumber saya untuk algoritma Borůvka:sumber
Saya cenderung menggunakan sesuatu yang menyerupai sintaksis Python. Python sudah cukup dekat dengan pseudocode sehingga dalam beberapa kasus pseudocode saya dapat berubah menjadi kode kerja aktual.
sumber
Jika Anda ingin memiliki kode yang pasti (yaitu sedikit atau tidak ada matematika, dekat dengan pemrograman nyata) Anda mungkin ingin mempertimbangkan untuk memiliki kode yang benar-benar dikompilasi. Ini memiliki beberapa keunggulan:
Seorang profesor di universitas saya melakukan ini dalam kursus algoritmanya. Bahasa pilihannya adalah Modula. Tetapi saya tidak berpikir pilihan bahasa tertentu yang penting. Tetaplah pada satu (per paradigma) yang paling sesuai dengan tingkat abstraksi Anda.
sumber