Da quello che ho visto, sembra che la notazione della grande O e la complessità del tempo e della memoria siano enfatizzate molto nell'educazione informatica formale ... comunque essendo autodidatta, questa percezione si basa sull'ascolto e sulla lettura di ciò che le persone con tali educazioni dì e scrivi.
Anche se credo che le idee e i concetti generali siano importanti, non credo che la sua formalizzazione (come la notazione big-O e la terminologia varia) sia altrettanto importante, tranne per gli scopi della comunicazione. Solo perché qualcuno non ha familiarità con la notazione formale e la terminologia non significa che non possono vedere come e perché un algoritmo sarebbe più veloce di un altro in un caso particolare. Le persone possono vedere che il tempo impiegato per la ricerca di un albero binario bilanciato si riferisce al logaritmo in base 2 del numero di nodi senza prima apprendere la teoria della complessità in alcun senso formale, se capiscono come funziona l'albero e hanno una ragionevole comprensione dell'alta matematica della scuola. È importante sapere quando prestare attenzione alla complessità e all'uso della memoria e considerare i casi tipici e peggiori, però ... ma alcune persone non lo fanno.
La notazione e la terminologia diventano importanti per la comunicazione. Offrono un modo piacevole di comunicare a qualcun altro la quantificazione delle prestazioni di un algoritmo. Poiché viene spesso pubblicato in articoli e spiegazioni, è utile avere almeno una vaga comprensione in modo che siano più facili da seguire.
Quindi sì, i concetti sono importanti (sebbene meno quando risorse e tempo sono ampi ma i dati non lo sono). Ma sebbene i concetti siano importanti, la loro formalizzazione spesso non è così importante - e bisogna ricordare che la notazione e la terminologia non sono le stesse dei concetti stessi.
Modificare:
Non pretenderei di comprendere i concetti in modo così dettagliato come qualcuno che ha studiato formalmente, ma molte idee generali hanno senso. Penso che ci sia valore nello studiare formalmente questo, ma parte di quel valore può ancora esistere senza.
Per quanto riguarda l'introduzione dei concetti (al di fuori dello studio formale), penso che un buon inizio sia quello di incoraggiare le persone a pensare a quanta memoria hanno le strutture di dati, quali passi comportano gli algoritmi e come queste cose cambiano con dati diversi.
Aiuta anche a considerare situazioni ipotetiche e cambiamenti, come considerare cosa succede se un albero è bilanciato rispetto a cosa succede se è il più sbilanciato possibile, o quanti livelli nella struttura sarebbero la maggior parte dei nodi, o quanti più nodi può tenere premuto se la profondità aumenta di un livello. Questo modo di pensare è generalmente utile per i programmatori, non solo quando si guarda alla complessità; e se applicato a pensare a come funzionano gli algoritmi e le strutture di dati in circostanze diverse, punta naturalmente nella stessa direzione di un esame più formale della complessità.
O(n^2)
significhi.