Big'O의 알고리즘 복합기.
Sabemos que uma complexidade é uma medida da quantidade de recursos que o algoritmo precisa para executar no computador, nele temos a complexidade de tempo e a complexidade de espaço, caso não especificarmos de qual complexidade se trata, significa que estamos falando da complexidade de tempo.
Para verificamos a eficiência de um código, precisamos analisar a complexidade do mesmo, estarei utilizando um exemplo simples de inversão de lista para poder explicar melhor. 어떤 속도로 컴퓨터를 실행할 수 있는지 확인하십시오., por isso estaremos analisando a entrada e o comportamento da função.
def inverter_lista(lista):
tamanho = len(lista)
limite = tamanho//2
for i in range(limite):
aux = lista[i]
lista[i] = lista[n-i]
lista[tamanho-i] = aux
Analisando o código acima, começaremos a verificar a complexidade de espaço, o mesmo retrata sobre as variáveis, no caso, o espaço na memória que elas estão sendo alocadas, logo ficaria assim:
# 4 + N = complexidade de espaço
포케 4? Porque temos quatro variáveis, a tamanho, limite, aux e i. ON seria a lista, pois não sabemos o tamanho dela, logo pode ser N valores.
Após termos verificado a complexidade de espaço, agora iremos verificar a de tempo, por cada linha na função que será executada, logo ficaria desta forma:
# 2 + 4*(N/2) = complexidade de tempo
넬 포데모스 관찰자:
Podemos ainda simplificar esta equação, se você analisar, só estamos utilizando a variável aux ea lista e se dividimos N/2 o resultado será N, logo a equação ficaria 2 + 2*N.
Certo, a equação 2 + 2*N, o 2 faz diferença quando o tamanho da lista é pequena, por exemplo, se a lista tiver o tamanho de 4 elementos, substituindo o N na equação pelo 4, ficaria 2 + 2*4 resultando em 2 + 8 -> 10, você percebe que a diferença que ela faz é de 20% na utilização de recursos, mais se com o tempo formos aumentando a quantidade de elementos na lista, por exemplo, 100, na equação ficaria 2 + 2 *100 -> 2 + 200 -> 202, 로고 você percebe que com este valor o 2 teria uma diferença de 1% na utilização de recursos e assim por diante. Chegamos a conclusão que o dominante na equação que é o 2*N, nele que iremos saber o quanto de utilização de recursos estará sendo usado em maior parte.
Próximo passo para chegarmos na notação que queremos, temos que remover da equação tudo aquilo que não é dominante, o que já fizemos anteriormente.
Logo este 2*N também chegará a não ser mas 무관한 não é mesmo? Até porque sabemos que, o que define nesta equação é o valor de N logo para definimos isso usaremos a notação do Big'O , resultando em:
# 2*N - complexidade de tempo = O(n)
O O(N), ela expressa um conjunto de funções dominadas pelo termo de grau N.
Mas fizemos aquela analise e aquela equação toda para ficarmos apenas com este termo, esse N? Sim, para analisar o algoritmo, tivemos que entender como funcionava, como era seu comportamento em si, qual o crescimento dele conforme a entrada, no caso a lista. Logo precisamos saber se ele é um conjunto de função que pertence ao O(n). Entretanto, podemos dizer que o gráfico desta função é linear, pois vai crescendo conforme o tamanho da entrada.
Este foi o diário de bordo #13. Hoje eu escolhi falar sobre o Big'O Notation na próxima semana irei trazer sobre o SoC galera, vlw. Vamos nos despedindo por aqui. Voltaremos com mais um diário de bordo.
당신의 목소리가 어떻게 들리나요?
Deixe um commentário abaixo.
참조
Reference
이 문제에 관하여(Big'O의 알고리즘 복합기.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/suspir0n/complexidade-de-algoritmo-com-bigo-3lmi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)