Saya ingin tahu algoritma apa yang mereka gunakan secara internal dan bagaimana cara cerdas menentukan algoritma tertentu untuk tugas tertentu? Misalnya jika sort mendapat file input yang besar, apakah akan menggunakan algoritma yang berbeda untuk ukuran data yang berbeda?
Itu pertanyaan yang menarik (+1 untuk itu). Saya tidak tahu apa jawabannya, tetapi jika saya adalah Anda, saya akan melihat kode sumber utilitas GNU tipikal untuk mendapatkan gambaran tentang algoritma mereka.
Apakah grep secara cerdas beralih algoritma saat mencari set data yang berbeda?
Saya kira tidak. Jangan mengutip saya karena saya tidak bisa benar-benar memberi tahu Anda dengan kepastian 100%, tapi saya benar-benar tidak berpikir begitu. Filsafat UNIX tentang hal-hal adalah bahwa satu hal melakukan satu hal dan satu hal saja. Itulah mengapa kita memiliki beberapa versi grep ( grep
, egrep
, fgrep
).
Juga, idenya adalah untuk melakukan satu hal dan hanya satu hal pada saat run-time. Perilaku dan algoritma yang berbeda dapat dikonfigurasikan sebagai argumen baris perintah, sehingga program yang sama dapat bertindak sedikit berbeda (dan mungkin sedikit lebih dioptimalkan) antara menjalankan. Contoh yang baik adalah perintah wc
dan diff
.
Namun, adaptasi perilaku berbasis konfigurasi (melalui argumen garis cmd); mereka tidak mengubah / mengadaptasi perilaku saat run-time. Ini biasanya merupakan kompleksitas yang tidak perlu untuk jenis artefak yang menjadi tujuan alat UNIX.
Kompleksitas seperti itu lebih cocok untuk alat IMO yang lebih kompleks dan kurang umum.
grep
,egrep
, ataufgrep
.