Galeria de mapas mentais Estrutura de Dados Capítulo 8 - Classificação
Capítulo 8 de "Estrutura de dados" - Notas de classificação, incluindo classificação por inserção, classificação por troca, classificação externa, comparação e aplicação de vários algoritmos de classificação interna, classificação por mesclagem, classificação por base, etc.
Editado em 2022-11-23 16:08:11Microbiologia medica, Infezioni batteriche e immunità riassume e organizza i punti di conoscenza per aiutare gli studenti a comprendere e ricordare. Studia in modo più efficiente!
La teoria cinetica dei gas rivela la natura microscopica dei fenomeni termici macroscopici e le leggi dei gas trovando la relazione tra quantità macroscopiche e quantità microscopiche. Dal punto di vista del movimento molecolare, vengono utilizzati metodi statistici per studiare le proprietà macroscopiche e modificare i modelli di movimento termico delle molecole di gas.
Este é um mapa mental sobre uma breve história do tempo. "Uma Breve História do Tempo" é um trabalho científico popular com influência de longo alcance. Ele não apenas introduz os conceitos básicos da cosmologia e da relatividade, mas também discute os buracos negros e a expansão. Do universo. questões científicas de ponta, como inflação e teoria das cordas.
Microbiologia medica, Infezioni batteriche e immunità riassume e organizza i punti di conoscenza per aiutare gli studenti a comprendere e ricordare. Studia in modo più efficiente!
La teoria cinetica dei gas rivela la natura microscopica dei fenomeni termici macroscopici e le leggi dei gas trovando la relazione tra quantità macroscopiche e quantità microscopiche. Dal punto di vista del movimento molecolare, vengono utilizzati metodi statistici per studiare le proprietà macroscopiche e modificare i modelli di movimento termico delle molecole di gas.
Este é um mapa mental sobre uma breve história do tempo. "Uma Breve História do Tempo" é um trabalho científico popular com influência de longo alcance. Ele não apenas introduz os conceitos básicos da cosmologia e da relatividade, mas também discute os buracos negros e a expansão. Do universo. questões científicas de ponta, como inflação e teoria das cordas.
organizar
conceito básico
estabilidade do algoritmo
Se houver dois elementos Ri e Rj com a mesma palavra-chave na lista a ser ordenada, e se a ordem (posição relativa) dos dois elementos não mudar após a ordenação, então o algoritmo de ordenação é denominado estável, caso contrário é instável.
Método de julgamento: se há troca de dados de longa distância
Classificação
Classificação interna
Refere-se a uma classificação em que todos os elementos são armazenados na memória durante a classificação
classificação externa
Refere-se a um processo de classificação em que todos os elementos não podem ser armazenados na memória ao mesmo tempo durante a classificação e são constantemente movidos entre a memória interna e externa durante o processo de classificação.
ordenação por inserção
Ideia básica
Cada vez que um registro a ser ordenado é inserido na subsequência previamente ordenada de acordo com seu tamanho de chave, até que todos os registros sejam inseridos.
classificação por inserção direta
Ideias
De L[2]~L[n-1], cada vez que o elemento a ser classificado L[i] é inserido na sequência previamente classificada, e os elementos maiores que L[i] são movidos de volta na ordem (compare as arestas para frente, mova o elemento para trás)
código
eficiência de espaço
Eficiência de tempo
Melhor: os elementos da tabela já estão ordenados
Número de comparações: n-1
Número de movimentos: 0
Pior: ordem inversa
Número de comparações:
Número de movimentos:
média
característica
Estabilizar
Tabelas lineares adequadas para armazenamento sequencial e armazenamento vinculado; quando é armazenamento vinculado, a posição do elemento especificado pode ser pesquisada da frente para trás (na verdade, a maioria dos algoritmos de classificação interna são adequados apenas para armazenamento sequencial)
classificação de meia inserção
Ideias
Primeiro dobre ao meio para encontrar a posição onde o elemento será inserido e, em seguida, mova todos os elementos após o elemento a ser inserido uniformemente.
código
Eficiência de tempo
Número de comparações: (independentemente do estado inicial da tabela)
Número de movimentos: depende do estado inicial da tabela ordenada
característica
Estabilizar
Aplica-se apenas a tabelas de sequência
Classificação de colina (classificação incremental decrescente)
Ideia básica
Organize os elementos com um intervalo de d1 (etapa/incremento) em um grupo, divida a tabela de classificação em várias subtabelas, execute a classificação por inserção direta dentro de cada subtabela, reduza o incremento d2 e repita o processo acima até di =1 até
código
Eficiência de espaço:
Eficiência de tempo:
característica
instável
Só é aplicável quando a tabela linear é armazenada sequencialmente (porque são utilizadas as características de acesso aleatório do armazenamento sequencial)
classificação de troca
Ideia básica
Troque as posições dos dois registros na sequência com base nos resultados da comparação das palavras-chave dos dois elementos na sequência.
Tipo de bolha
Ideias
Compare os valores dos elementos adjacentes de trás para frente (ou de frente para trás). Se estiverem na ordem inversa, troque-os até que a sequência seja comparada. O resultado de cada rodada será trocar o menor elemento pelo primeiro. posição da sequência a ser ordenada (ou para o maior elemento). Os elementos são trocados para o final da coluna a ser ordenada), e este ciclo pode ser feito n-1 vezes.
código
eficiência de espaço
Eficiência de tempo
Melhor (nenhuma troca ocorre na primeira passagem de classificação, salte diretamente do loop)
Número de comparações: n-1
Número de movimentos: 0
Pior (na ordem inversa)
Número de comparações
Número de movimentos
característica
Estabilizar
A subsequência gerada na classificação por bolha deve ser ordenada globalmente (diferente da inserção direta), e todos os elementos nela devem ser maiores ou menores que todos os elementos na subsequência não ordenada, e cada passagem de classificação colocará um elemento em sua posição final
Ordenação rápida
Ideias
Com base no método dividir e conquistar, cada vez que um determinado elemento pivô é tomado como referência, a sequência é dividida em duas subtabelas, a esquerda e a direita, e então classificada recursivamente nas subtabelas.
código
Eficiência de espaço (pilha recursiva)
Eficiência de tempo
Pior (ordenado ou invertido)
Melhor (simétrico, ou seja, a sequência é dividida em partes iguais para cada benchmark)
Características
instável
O algoritmo com melhor desempenho médio entre algoritmos de ordenação interna
Nenhuma subsequência ordenada é gerada durante o processo, mas cada operação de classificação colocará o elemento pivô (base) em sua posição final.
classificação externa
conceito
Quando há muitos registros no arquivo e o arquivo inteiro não pode ser copiado para a memória para classificação, uma parte dos dados precisa ser transferida para a memória para classificação a cada vez. O processo de classificação envolve múltiplas trocas de memória interna e externa. .
Métodos de classificação externa
etapa
①Para classificação de mesclagem k-way, k buffers de entrada e 1 buffer de saída precisam ser alocados na memória
② Classifique internamente um total de N registros (usando um algoritmo de classificação interno) e gere r segmentos de mesclagem iniciais ordenados internamente (r=『N/L], L é o número de buffers de entrada na memória)
③Mesclando viagens S e rotas k,
1) Leia os blocos de k segmentos mesclados em k buffers de entrada
2) Use o algoritmo "merge sort" para selecionar o menor registro dos k segmentos de mesclagem e armazená-lo temporariamente no buffer de saída (k-1 comparações são necessárias a cada vez)
3) Quando o buffer de saída estiver cheio, anote a memória externa
4) Se o i-ésimo buffer de entrada estiver vazio, leia o próximo bloco de disco do i-ésimo segmento de mesclagem
Custo de tempo
Hora de ler e gravar na memória externa
Proporcional ao número de passagens de mesclagem S
Tempo necessário para classificação interna
Tempo de mesclagem interna
otimização
1) Aumente o número de caminhos de fusão k e só precisa de fusão balanceada multidirecional
Custo 1: Necessidade de aumentar o buffer de entrada correspondente
Custo 2: Cada vez que selecionar um elemento mínimo de k segmentos de mesclagem requer (k-1) comparações de palavras-chave (pode ser resolvido pela árvore perdedora)
2) Reduza o número de segmentos de mesclagem iniciais r
Fusão balanceada multidirecional e árvore perdedora
Ideia básica
Para evitar que a mesclagem interna seja afetada pelo aumento de k, uma árvore perdedora é introduzida. Os k nós folha armazenam respectivamente os registros dos k segmentos de mesclagem atualmente participantes da comparação durante o processo de mesclagem. memorize as "falhas" nas subárvores esquerda e direita ", o nó raiz aponta para o número mínimo;
O número inicial de comparações é k-1. Depois disso, são necessários apenas "log2k] tempos de comparação para selecionar um valor mínimo.
Número de comparações
Após a introdução da árvore perdedora, o número de comparações não tem nada a ver com k, mas à medida que k aumenta, o número de buffers de entrada pode ser aumentado. Se o espaço total de memória permanecer inalterado, a capacidade de cada buffer precisa ser reduzida para. reduzir o número de trocas de memória interna e externa aumentar.
Classificação por seleção de substituição (gerando segmentos de mesclagem iniciais)
Propósito
Aumente o comprimento de cada segmento de mesclagem (mas não o comprimento fixo), reduzindo assim o número de segmentos de mesclagem
etapa
Deixe o arquivo inicial a ser classificado ser FI, o arquivo de saída do segmento de mesclagem inicial ser FO e a área de trabalho da memória ser WA (pode acomodar w registros)
1) Insira w registros do FI para o espaço de trabalho WA.
2) Selecione o registro com o valor mínimo da palavra-chave de WA e registre-o como registro MINIMAX.
3) Envie registros MINIMAX para FO.
4) Se FI não estiver vazio, insira o próximo registro de FI em WA.
5) Selecione o menor registro de palavra-chave de todos os registros em WA com palavras-chave maiores que o registro MINIMAX como o novo registro MINIMAX.
6) Repita 3)~5) até que nenhum novo registro MINIMAX possa ser selecionado em WA, obtendo assim um segmento de mesclagem inicial e enviando um sinalizador final do segmento de mesclagem para FO.
7) Repita 2)~6) até que WA esteja vazio. A partir disso, todos os segmentos iniciais mesclados são obtidos.
melhor árvore de mesclagem
Ideia básica
1) Cada segmento de mesclagem inicial corresponde a um nó folha, e o número de blocos contidos no segmento de mesclagem é o peso da folha.
2) Mesclar árvore WPL = a soma dos comprimentos de caminho ponderados de todos os nós folha na árvore
3) O número de E/S de disco durante o processo de mesclagem = WPL da árvore mesclada*2
Como construir a árvore de mesclagem ideal
1) Complemente o parágrafo virtual
①A árvore de mesclagem ideal para fusão k-ária deve ser uma árvore k-ária estrita, ou seja, existem apenas nós com graus k e 0 na árvore.
②Se (número inicial de segmentos mesclados-1)%(k-1)=0, significa que uma árvore k-ária estrita pode ser formada
③ Caso contrário, vários segmentos virtuais (segmentos mesclados ocupando 0 blocos) precisam ser adicionados para fazer a fórmula acima = 0
2) Construa uma árvore k-ary Huffman
Cada vez, k árvores com os menores pesos dos nós raiz são selecionadas para mesclar, e a soma dos pesos desses k nós raiz é usada como o peso do novo nó raiz.
Comparação e aplicação de vários algoritmos de classificação interna
Comparação de algoritmos de classificação interna
Aplicação do algoritmo de classificação interna
①Se n for pequeno, a classificação por inserção direta ou a classificação por seleção simples podem ser usadas. Como a classificação por inserção direta requer mais movimentos de registro do que a classificação por seleção simples, quando o próprio registro contém uma grande quantidade de informações, a classificação por seleção simples é melhor.
② Se o estado inicial do arquivo for basicamente ordenado por palavras-chave, é apropriado usar inserção direta ou classificação por bolha.
③Se n for grande, um método de classificação com complexidade de tempo de O (nlogzn) deve ser usado: classificação rápida, classificação por heap ou classificação por mesclagem.
1) A classificação rápida é considerada o melhor método entre os métodos atuais de classificação interna baseados em comparação. Quando as palavras-chave a serem classificadas são distribuídas aleatoriamente, o tempo médio de classificação rápida é o mais curto.
2) A classificação heap requer menos espaço auxiliar do que a classificação rápida e não sofre o pior cenário que a classificação rápida pode ter; ambas as classificações são instáveis.
3) Se a classificação precisar ser estável e a complexidade de tempo for O (nlog2n), a classificação por mesclagem poderá ser usada.
④ No método de classificação baseado em comparação, após cada comparação dos tamanhos de duas palavras-chave, ocorrem apenas duas transferências possíveis. Portanto, uma árvore binária pode ser usada para descrever o processo de comparação e determinação. Quando as palavras-chave são distribuídas aleatoriamente, qualquer algoritmo de classificação que dependa de "comparação" requer pelo menos tempo O(nlogzn).
⑤Se n for muito grande e o número de palavras-chave registradas for pequeno e puder ser decomposto, é melhor usar a classificação radix.
⑥Quando o próprio registro contém uma grande quantidade de informações, para evitar gastar muito tempo movendo o registro, uma lista vinculada pode ser usada como estrutura de armazenamento.
Estrutura de armazenamento aplicável ao algoritmo
A estrutura de armazenamento sequencial é adequada para acesso aleatório e acesso sequencial, enquanto o armazenamento em cadeia é adequado apenas para acesso sequencial.
Somente algoritmos de acesso sequencial podem usar estruturas de cadeia (como inserção direta, bolha), e outros algoritmos de classificação interna só podem usar armazenamento sequencial.
Mesclar classificação e classificação radix
classificação por mesclagem
Ideia básica
A classificação por mesclagem bidirecional trata a lista a ser classificada como n sublistas (cada sublista tem comprimento 1) e, em seguida, as mescla recursivamente até que uma lista ordenada de comprimento n seja sintetizada.
código
Análise de desempenho
eficiência de espaço
Eficiência de tempo
Estabilizar
Classificação de raiz
Ideia básica
Use a ideia de classificação de várias palavras-chave para lidar com palavras-chave lógicas únicas
Bit mais significativo primeiro (MSD)
Divida-o em várias subsequências menores, camada por camada, de acordo com o peso decrescente da posição-chave.
Menos significativo primeiro (LSD)
Classifique aumentando o peso da palavra-chave
Processo de classificação (LSD)
A base r = 10 requer 10 filas em cadeia; cada palavra-chave tem 3 bits e requer três operações de "alocação" e "coleta".
Análise de desempenho
eficiência de espaço
Eficiência de tempo
d distribuição e coleta de viagens
Uma alocação requer O(n)
Uma coleção requer O(r)
independente do estado inicial da sequência
Estabilizar
ordenação por seleção
Ideia básica
Cada passagem (i) seleciona o elemento com a menor palavra-chave entre os n-i 1 elementos a serem classificados, como o i-ésimo elemento da subsequência ordenada, e faz um loop n-1 vezes
Ordenação por seleção simples
Ideias
A i-ésima classificação seleciona o elemento com a menor palavra-chave de L[i...n] e o troca por L[i]. Cada passagem pode determinar a posição final de um elemento.
código
eficiência de espaço
Eficiência de tempo
Número de comparações: n(n-1)/2
Número de movimentos
Melhor: 0
Pior: 3(n-1)
característica
instável
Classificação de pilha
Ideias
amontoar
Big root heap (big top heap): o valor do nó é maior que o valor de seus filhos esquerdo e direito
Heap raiz pequeno: o valor do nó é menor que o valor de seus filhos esquerdo e direito
Algoritmo de classificação
① Primeiro construa n elementos em um heap raiz grande, o elemento superior do heap é o valor máximo, produza-o e envie o elemento inferior do heap para o topo do heap
② Ajuste o elemento superior do heap para baixo para manter a natureza de um heap raiz grande, em seguida, produza o elemento superior do heap e repita isso
processo de classificação
① Para uma árvore binária completa com n nós, comece a filtrar a partir do nó pai do último nó ("n/2]) e troque os nós pai e filho para torná-lo chamado de heap raiz grande (o nó pai pode continuar a vá para baixo) e, em seguida, filtre as subárvores enraizadas em cada nó ("n/2]~1)
②Depois de gerar o elemento superior do heap, troque o último elemento superior do heap pelo elemento superior do heap e, em seguida, troque recursivamente a ordem do elemento superior do heap pelo maior dos filhos.
código
Algoritmo de criação de heap raiz grande
Algoritmo de classificação de heap
operação de inserção
Primeiro coloque o novo nó no final do heap e depois aponte-o para cima para a operação de ajuste
complexidade de tempo
Análise de desempenho
eficiência de espaço
Eficiência de tempo
Tempo de construção de heap:
Operações de ajuste:
característica
instável
Adequado para armazenamento sequencial (devido ao acesso aleatório)