Para medir a complexidade de um algoritmo, é complexidade de tempo ou complexidade computacional? Qual a diferença entre eles?
Eu costumava calcular a contagem máxima (pior) da operação básica (mais cara) no algoritmo.
Para medir a complexidade de um algoritmo, é complexidade de tempo ou complexidade computacional? Qual a diferença entre eles?
Eu costumava calcular a contagem máxima (pior) da operação básica (mais cara) no algoritmo.
Respostas:
A complexidade computacional é apenas um termo mais geral, pois o tempo não é o único recurso que podemos considerar. O próximo mais óbvio é o espaço que um algoritmo usa e, portanto, podemos falar sobre a complexidade do espaço , também como parte da complexidade computacional. De fato, podemos fazer isso para qualquer medida que você queira usar, é claro que algumas são mais úteis que outras.
Assim, contar o número de etapas que um algoritmo executa no pior caso fornece uma complexidade de tempo vinculada ao problema que resolve, contando quanta memória / quantas células de fita ele usa fornece uma complexidade de espaço vinculada etc. etc.
Lembre-se também de que, se você quiser ser rigoroso, a complexidade se refere ao problema, não ao algoritmo; portanto, um problema tem limites de complexidade, um algoritmo possui limites de recursos (tempo de execução, uso do espaço ...). É apenas uma questão de formalidade de definição, a teoria da complexidade lida com problemas. Sim, os algoritmos são um instrumento fundamental para a análise de problemas e complexidade e algorithmics estão estreitamente ligados, mas formalmente não diríamos Merge-Sort (um algoritmo) está em , é o problema S o r t i n g que está em P . A Merge-Sort usa certos recursos ( O ( n log n )etapas, por exemplo). O limite de recursos e a correção do algoritmo implicam a complexidade (superior) do problema, mas são coisas diferentes. é também t C 0 -completo sob Uma C 0 -reductions, esta complexidade ligado só pode realmente ser indicado para um problema (mas não têm implicações algorítmicos).
A complexidade ciclomática é freqüentemente usada como a medida da complexidade computacional. Um exemplo útil é fornecido em /programming/9097987/calculation-of-cyclomatic-complexity
Pode haver muitos caminhos diferentes (possivelmente aninhados) por meio de um algoritmo, dando-lhe uma alta complexidade ciclomática, mas nenhum loop dando a ele uma baixa complexidade de tempo. Um programa com um único loop teria uma baixa complexidade ciclomática, mas possivelmente uma alta complexidade de tempo.
A complexidade ciclomática é frequentemente usada como uma medida da manutenção necessária para o código. Uma discussão mais detalhada é fornecida em http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity . Isso é diferente da complexidade do tempo, que é a medição do tempo de execução do código e pode ser usada para avaliar a percepção dos usuários sobre a eficácia do sistema.