Skor kesulitan perubahan kode dengan O besar

Misalkan situs tersebut menjual produk di situs tersebut. Kami ingin menampilkan produk di 3 tempat: di katalog, di halaman promo dan di halaman artikel penjualan. Kami menulis 3 fungsi, dan di masing-masing kami membuat permintaan ke database:





Contoh klasik dari perubahan dalam persyaratan bisnis - seorang manajer mendatangi kami dan berkata: produk sekarang dibagi menjadi aktif (dengan tanda aktif = benar) dan tidak aktif. Produk aktif harus ditampilkan di 3 tempat yang sama, tidak aktif - tidak ditampilkan di mana pun.





Sekarang kita bisa menilai apakah arsitektur kita buruk atau bagus. Kami hanya memiliki 3 fungsi untuk menerima barang, dan tepat 3 fungsi, kami perlu menambahkan tanda centang untuk active = true. Ternyata kompleksitas perubahan pada kode kita adalah O (n), dimana n adalah banyaknya fungsi. Akan ada 5 fungsi: getProductsCatalog, getProductsByAction, getProductsByArticle, getRecommendedProducts, getMostViewedProducts - perlu membuat perubahan dalam 5 fungsi, tetapi sekali lagi kompleksitas kodenya hanya O (n).





Jika Anda menambahkan 1 level abstraksi, maka Anda dapat mengurangi jumlah perubahan yang diperlukan dalam kode menjadi O (1)!





Dalam contoh ini, kami telah memperkenalkan 1 level abstraksi, dan sekarang perlu membuat perubahan hanya di 1 tempat.





, , front , . :





- front , O(1). - O(n) - .. , , . - 1 . front , O(1+n) - 1 - , n - . , O(n+m), n - , m - .





O(1+n) O(1) 1 , 2.





:





O(n^2) - . 2 , 1 , , .





O(n) - . .





O(n+m) - , O(n), 1 , 2 n 1 m 2 .





O(1) - , .





O(0) - CMS . .





:





O, .





Pada artikel ini, saya tidak peduli dengan nama fungsinya. Saya menyarankan Anda untuk membaca artikel tentang penamaan fungsi P / A / HC / LC dan tindak lanjut artikel tersebut dari peserta Habr.








All Articles