Análise de classificação por inserção

img

Análise de classificação por inserção

O que é ordenação por inserção

A ordenação por inserção é um algoritmo de ordenação simples, mas eficaz, cuja ideia básica é inserir um elemento a ser ordenado na sequência de elementos ordenados, um a um, até que todos os elementos sejam inseridos, obtendo assim uma sequência ordenada.

As etapas específicas são as seguintes:

  1. Assumindo que inicialmente o primeiro elemento forma uma sequência ordenada por si só, que pode ser considerada como uma parte ordenada.
  2. Começando com o segundo elemento, compare-o com a sequência classificada da direita para a esquerda e encontre a posição apropriada para inserir.
  3. Compare o elemento a ser inserido com os elementos da sequência ordenada um a um, se o elemento a ser inserido for menor, mova o elemento ordenado para a direita uma posição para liberar espaço para o elemento a ser inserido.
  4. Repita a etapa 3 até que a posição de inserção seja encontrada ou a sequência classificada tenha sido percorrida.
  5. Insira o elemento a ser inserido na posição de inserção encontrada.
  6. Repita as etapas 2 a 5 até que todos os elementos sejam inseridos na posição correta e a classificação esteja concluída.

A complexidade de tempo do método de classificação por inserção é O(n^2), onde n representa o número de elementos a serem classificados. Na prática, a ordenação por inserção funciona bem para sequências de pequena escala ou parcialmente ordenadas, mas é relativamente ineficiente para sequências desordenadas de grande escala.

Vale ressaltar que a ordenação por inserção é um algoritmo de ordenação estável, ou seja, a ordem relativa de elementos iguais permanece inalterada após a ordenação. Isso o torna uma vantagem em determinados cenários.

Resumo: A classificação por inserção é um algoritmo de classificação simples e prático para construir uma sequência ordenada comparando e inserindo operações uma a uma. Embora a complexidade de tempo seja alta, desempenho decente pode ser obtido para sequências de pequena escala e parcialmente ordenadas.

código de demonstração

Forneça um exemplo de código para implementar a classificação por inserção usando Python:

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 当前待插入元素
        j = i - 1     # 已排序部分的最后一个元素下标

        # 将大于待插入元素的元素向右移动
        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]
            j -= 1

        # 在合适位置插入待插入元素
        arr[j + 1] = key

# 测试示例
array = [9, 5, 2, 8, 1, 7]
insertion_sort(array)
print("排序结果:", array)

A execução do código acima produzirá os resultados da classificação:

排序结果: [1, 2, 5, 7, 8, 9]

Esse código obtém um array classificado iterando pelo array a ser classificado, inserindo cada elemento na posição correta no subarray classificado. Espero que este exemplo ajude você a entender a implementação do algoritmo de classificação por inserção.

otimização de algoritmo

Para otimizar o algoritmo de classificação por inserção, os dois métodos de otimização comuns a seguir podem ser considerados: inserção de pesquisa binária e finalização antecipada.

  1. Inserção de pesquisa binária:
    No processo de classificação por inserção, a pesquisa binária pode ser usada para determinar a posição correta do elemento a ser inserido. As etapas específicas são as seguintes:

    • Compara o elemento a ser inserido com o elemento do meio da seção classificada.
    • Se o elemento a ser inserido for menor que o elemento do meio, limite a posição de inserção à metade esquerda; caso contrário, limite a posição de inserção à metade direita.
    • Repita as etapas acima para restringir o intervalo de pesquisa até que a posição do elemento a ser inserido seja determinada.
    • Depois de inserir o elemento na posição correta, os elementos na parte classificada são movidos uma posição para a direita como um todo para dar espaço para o elemento a ser inserido.
  2. Finalização antecipada:
    durante o processo de classificação por inserção, se o elemento a ser inserido estiver na posição correta, o loop interno pode ser encerrado antecipadamente para reduzir comparações desnecessárias.

Aqui está um exemplo de código otimizado para o algoritmo de ordenação por inserção:

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 当前待插入元素
        left = 0      # 已排序部分的起始位置
        right = i - 1 # 已排序部分的最后一个元素下标

        # 使用二分查找找到待插入元素的正确位置
        while left <= right:
            mid = (left + right) // 2
            if arr[mid] < key:
                left = mid + 1
            else:
                right = mid - 1

        # 在合适位置插入待插入元素,并提前终止内层循环(如果已经处于正确位置)
        for j in range(i - 1, left - 1, -1):
            if arr[j] == key:
                break
            arr[j + 1] = arr[j]
        else:
            arr[left] = key

# 测试示例
array = [9, 5, 2, 8, 1, 7]
insertion_sort(array)
print("排序结果:", array)

Por meio das otimizações acima, o algoritmo de classificação por inserção pode classificar a matriz com mais eficiência. Espero que este exemplo otimizado atenda às suas necessidades.

experiência

Para otimização de algoritmos, seguem algumas experiências:

  1. Entenda a complexidade de tempo do algoritmo: Antes da otimização do algoritmo, a complexidade de tempo do algoritmo a ser otimizado deve primeiro ser avaliada e compreendida. Somente compreendendo as características de complexidade de tempo do algoritmo, a otimização direcionada pode ser realizada.

  2. Encontre o ponto de gargalo: Ao otimizar o algoritmo, é necessário encontrar o ponto de gargalo que afeta o desempenho do algoritmo. Esses pontos de gargalo geralmente são operações críticas ou cálculos duplos que levam a ineficiências algorítmicas. Ao otimizar os pontos de gargalo, o desempenho geral do algoritmo pode ser melhorado.

  3. Trocando espaço por tempo: Às vezes, a execução de um algoritmo pode ser acelerada usando espaço adicional para armazenar resultados intermediários ou usando estruturas de dados auxiliares. Essa estratégia de trocar espaço por tempo é eficaz em alguns casos.

  4. Compreensão profunda de estruturas de dados e algoritmos: Boa seleção de estrutura de dados e design de algoritmo são a base de algoritmos eficientes. A compreensão aprofundada de várias estruturas de dados e algoritmos e a familiaridade com suas características e cenários de aplicação podem nos ajudar a otimizar melhor os algoritmos.

  5. Análise e seleção com base em condições reais: Diferentes métodos de otimização de algoritmos são adequados para diferentes problemas e cenários. De acordo com as necessidades específicas e situação real, escolha a estratégia de otimização apropriada. Ao otimizar o algoritmo, a legibilidade, manutenção e escalabilidade do código também devem ser consideradas.

  6. Teste e Avaliação: Testes adequados e avaliação de algoritmos otimizados são necessários. Ao comparar o desempenho do algoritmo antes e depois da otimização e a exatidão dos resultados, a eficácia da otimização pode ser verificada e outros ajustes e melhorias podem ser feitos conforme necessário.

Ao otimizar o algoritmo, a legibilidade, manutenção e escalabilidade do código também devem ser consideradas.

  1. Teste e Avaliação: Testes adequados e avaliação de algoritmos otimizados são necessários. Ao comparar o desempenho do algoritmo antes e depois da otimização e a exatidão dos resultados, a eficácia da otimização pode ser verificada e outros ajustes e melhorias podem ser feitos conforme necessário.

Em resumo, a otimização de algoritmos é um processo de aprendizado e prática contínuos. Por meio de uma compreensão profunda dos princípios do algoritmo, dominando as habilidades e experiências de otimização apropriadas e combinando problemas práticos para análise e prática, podemos melhorar continuamente a eficiência e o desempenho dos algoritmos.

Acho que você gosta

Origin blog.csdn.net/weixin_53742691/article/details/131670927
Recomendado
Clasificación