Z tego, co widziałem, wydaje się, że notacja big-O oraz złożoność czasu i pamięci są bardzo podkreślane w formalnej edukacji informatycznej ... bez względu na to, że są samoukami, ta percepcja opiera się na słuchaniu i czytaniu osób posiadających takie wykształcenie mów i pisz.
Chociaż wierzę, że ogólne idee i koncepcje są ważne, nie sądzę, aby ich formalizacja (taka jak notacja big-O i różnorodna terminologia) miała tak samo duże znaczenie, z wyjątkiem celów komunikacji. To, że ktoś nie zna formalnej notacji i terminologii, nie oznacza, że nie widzi, w jaki sposób i dlaczego jeden algorytm byłby szybszy od drugiego w konkretnym przypadku. Ludzie widzą, że czas potrzebny na przeszukanie zrównoważonego drzewa binarnego odnosi się do logarytmu podstawy 2 liczby węzłów bez uprzedniego poznania teorii złożoności w jakimkolwiek formalnym sensie, jeśli rozumieją, jak działa drzewo i mają rozsądną wiedzę na temat wysokiego matematyka szkolna. Ważne jest, aby wiedzieć, kiedy zwracać uwagę na złożoność i wykorzystanie pamięci, a także brać pod uwagę typowe i najgorsze przypadki, ale ... niektórzy nie.
Notacja i terminologia stają się ważne dla komunikacji. Dają dobry sposób na przekazanie kwantyfikacji wydajności algorytmu komuś innemu. Ponieważ często pojawia się w dokumentach i objaśnieniach, warto mieć co najmniej niejasne zrozumienie, aby łatwiej było je śledzić.
Tak, koncepcje są ważne (choć mniej ważne, gdy zasoby i czas są wystarczające, ale dane nie są). Ale chociaż pojęcia są ważne, ich sformalizowanie często nie jest tak ważne - należy pamiętać, że notacja i terminologia nie są takie same, jak same pojęcia.
Edytować:
Nie twierdziłbym, że rozumiem te pojęcia tak szczegółowo, jak ktoś, kto formalnie studiował, ale wiele ogólnych pomysłów ma sens. Wydaje mi się, że formalne badanie tego ma wartość, ale niektóre z nich mogą istnieć bez tego.
Jeśli chodzi o wprowadzenie pojęć (poza formalnym studium), myślę, że dobrym początkiem jest zachęcenie ludzi do zastanowienia się, ile pamięci zajmują struktury danych, jakie kroki wymagają algorytmy i jak te rzeczy zmieniają się w zależności od różnych danych.
Pomaga również rozważać hipotetyczne sytuacje i zmiany, takie jak rozważenie, co się stanie, jeśli drzewo jest zrównoważone, a co się stanie, jeśli będzie tak niezrównoważone, jak to możliwe, lub ile poziomów w drzewie byłoby w większości węzłów, lub ile więcej węzłów może przytrzymaj, jeśli głębokość zostanie zwiększona o jeden poziom. Ten sposób myślenia jest na ogół przydatny dla programistów, nie tylko patrząc na złożoność; a jeśli zastosuje się je do myślenia o tym, jak algorytmy i struktury danych działają w różnych okolicznościach, w naturalny sposób wskazuje ten sam kierunek, jak w przypadku bardziej formalnego badania złożoności.
O(n^2)
to znaczy.