Przed przeczytaniem „Sztuki programowania komputerowego” (TAOCP) nie zastanawiałem się głęboko nad tymi pytaniami. Używałbym pseudokodu do opisywania algorytmów, rozumienia ich i szacowania czasu działania tylko o rzędach wzrostu. TAOCP gruntownie zmienia zdanie.
TAOCP używa angielskiego mieszanego z krokami i goto do opisywania algorytmu, i wykorzystuje schematy blokowe do łatwiejszego zobrazowania algorytmu. Wygląda na niski poziom, ale uważam, że są pewne zalety, szczególnie w przypadku schematu blokowego, który bardzo często ignorowałem. Każdą ze strzałek możemy oznaczyć twierdzeniem o aktualnym stanie rzeczy w chwili, gdy obliczenia przechodzą przez tę strzałkę, i wykonać indukcyjny dowód na algorytm. Autor mówi:
Twierdzeniem autora jest to, że naprawdę rozumiemy, dlaczego algorytm jest ważny tylko wtedy, gdy osiągniemy punkt, w którym nasze umysły pośrednio wypełniły wszystkie twierdzenia, jak to pokazano na ryc. 4.
Nie doświadczyłem takich rzeczy. Kolejną zaletą jest to, że możemy policzyć, ile razy każdy krok jest wykonywany. Łatwo jest sprawdzić pierwsze prawo Kirchhoffa. Nie analizowałem dokładnie czasu działania, więc niektóre mogło zostać pominięte, gdy szacowałem czas działania.
Analiza rzędów wzrostu jest czasami bezużyteczna. Na przykład nie możemy odróżnić quicksort od heapsort, ponieważ wszystkie są , gdzie E X jest oczekiwaną liczbą zmiennych losowych X , dlatego powinniśmy przeanalizować stałą, powiedzmy E ( T 1 ( n ) ) = A 1 n lg n + B 1 n + O ( log n )i , dzięki czemu możemy lepiej porównać i . A także czasami powinniśmy porównywać inne wielkości, takie jak wariancje. Tylko zgrubna analiza rzędów wzrostu czasu pracy nie wystarczy. Jako TAOCP tłumaczy algorytmy na język asemblerowy i oblicza czas działania, To dla mnie zbyt trudne, więc chcę poznać niektóre techniki bardziej szczegółowej analizy czasu działania, co jest również przydatne, w przypadku języków wyższego poziomu, takich jak C, C ++ lub pseudokody.
I chcę wiedzieć, jaki styl opisu jest używany głównie w pracach badawczych i jak leczyć te problemy.