Sim, eu diria que conhecer algo sobre complexidade computacional é uma obrigação para qualquer programador sério. Contanto que você não esteja lidando com grandes conjuntos de dados, você não terá problemas com a complexidade, mas se quiser escrever um programa que lide com problemas sérios, será necessário.
No seu caso específico, seu exemplo de localização de componentes conectados pode ter funcionado para gráficos de até nós. No entanto, se você tentasse um gráfico com nós, o algoritmo de seu professor provavelmente conseguiria isso em 1 segundo, enquanto seu algoritmo teria (dependendo de quão ruim era a complexidade) levado 1 hora, 1 dia ou talvez até 1 eternidade.100.000100100.000
Um erro bastante comum que os alunos cometem em nosso curso de algoritmos é iterar em uma matriz como esta:
while array not empty
examine first element of array
remove first element from array
Esse pode não ser o código mais bonito, mas em um programa complicado algo assim pode aparecer sem que o programador esteja ciente disso. Agora, qual é o problema com este programa?
Suponha que o executemos em um conjunto de dados de elementos. Comparado com o programa a seguir, o programa anterior executará mais lentamente.50.000100.00050.000
while array not empty
examine last element of array
remove last element from array
Espero que você concorde que ter o conhecimento necessário para executar seu programa vezes mais rápido é provavelmente uma coisa importante para um programador. Compreender a diferença entre os dois programas requer algum conhecimento básico sobre a teoria da complexidade e algum conhecimento sobre os detalhes da linguagem em que você está programando.50.000
Na minha linguagem de pseudocódigo, "remover um elemento de uma matriz" desloca todos os elementos à direita do elemento, sendo removida uma posição da esquerda. Isso torna a remoção do último elemento uma operação , pois, para isso, precisamos interagir apenas com 1 elemento. A remoção do primeiro elemento é pois para remover o primeiro elemento, precisamos mudar todos os outros elementos uma posição para a esquerda também.O ( n ) n - 1O(1)O(n)n−1
Um exercício muito básico de complexidade é provar que o primeiro programa fará operações enquanto o segundo programa usa apenas operações. Se você conectar , verá que um programa é drasticamente mais eficiente que o outro.nn=100.00012n2nn=100.000
Este é apenas um exemplo de brinquedo, mas já requer um entendimento básico da complexidade para diferenciar os dois programas. Se você estiver realmente tentando depurar / otimizar um programa mais complicado que possua esse erro, é necessário um entendimento ainda maior para encontrar onde está o erro. Porque um erro como remover um elemento de uma matriz dessa maneira pode ser muito bem oculto por abstrações no código.
Ter um bom entendimento da complexidade também ajuda na comparação de duas abordagens para resolver um problema. Suponha que você tenha apresentado duas abordagens diferentes para resolver o problema dos componentes conectados por conta própria: para decidir entre eles, seria muito útil se você pudesse (rapidamente) estimar sua complexidade e escolher a melhor.