Programação  
 
Rede de conhecimento computador >> Programação >> Programação Visual Basics >> Content
Como um algoritmo QuickSort com o recurso de visualização lida com a seleção do elemento pivô como primeiro na matriz?
Vamos quebrar como um algoritmo do QuickSort com a visualização lida com a seleção do pivô quando é sempre o primeiro elemento da matriz e como a visualização pode funcionar.

Como funciona o PIVOT PIVOT PIREMEMENTO:

1. seleção de pivô: O algoritmo sempre escolhe o * primeiro elemento * * na matriz (sub) como pivô. Essa é a diferença chave de outras estratégias de seleção de pivô.

2. Particionamento: O objetivo é reorganizar a matriz para que:
* Todos os elementos * menores ou iguais a * o pivô estão à esquerda do pivô.
* Todos os elementos * maiores que * o pivô estão à direita do pivô.

Aqui está uma abordagem comum para a partição (usando duas dicas, `i` e` j`):

* `eu` começa no elemento * após * o pivô (geralmente o índice 1).
* `j` começa no * último * elemento da matriz (sub).
* O loop continua enquanto `i <=j`:
* Incremento `eu 'até você encontrar um elemento` arr [i] `isso é * maior que * o pivô.
* Diminuir `j` até encontrar um elemento` arr [j] `isso é * menor ou igual a * o pivô.
* Se `i * Se `i> =j`, a partição estiver concluída. Troque o pivô com `arr [j]`. O pivô está agora em sua posição classificada.

3. Recursão: O algoritmo se chama recursivamente nos dois sub-maiores:
* A sub-matriz à * esquerda * do pivô (agora classificado).
* A sub-matriz para a * direita * do pivô (agora classificado).

Exemplo:

Digamos que temos a matriz:`[7, 2, 1, 6, 8, 5, 3, 4]`

1. seleção de pivô: Pivô =`7` (primeiro elemento)

2. Particionamento:
* Inicial:`[7, 2, 1, 6, 8, 5, 3, 4]`
* `I` Começa em 2,` j` começa em 4.
* `Eu 'move até encontrar 8 (que é> 7).
* `j` se move até encontrar 4 (que é <=7).
* Swap 8 e 4:`[7, 2, 1, 6, 4, 5, 3, 8]`
* `Eu 'se move até encontrar 5.
* `j` se move até encontrar 3.
* Swap 5 e 3:`[7, 2, 1, 6, 4, 3, 5, 8]`
* `Eu 'se move até encontrar 5.
* `j` se move até encontrar 3 (novamente).
* i> =j. Swap Pivot (7) com arr [j] (3):`[3, 2, 1, 6, 4, 7, 5, 8]`
* O pivô (7) está agora em sua posição correta.

3. Recursão:
* O Quicksort é chamado em `[3, 2, 1, 6, 4]`
* O Quicksort é chamado em `[5, 8]`

considerações de visualização:

A visualização precisaria mostrar:

* destacando o pivô: Indique claramente qual elemento está atualmente selecionado como o pivô. Uma mudança de cor ou um rótulo visual é comum.
* Movimento do ponteiro: Mostre visualmente os ponteiros `i` e` j` se movendo pela matriz. Use setas, cores diferentes ou outros indicadores.
* Swaps: Animar a troca de elementos. Por exemplo, os dois elementos que estão sendo trocados podem "se mover" para as posições um do outro.
* Processo de partição: Enfatize como os elementos estão sendo reorganizados em torno do pivô. Isso pode envolver elementos de coloração que são conhecidos por serem menores ou maiores que o pivô.
* chamadas recursivas: Mostre como a matriz está sendo dividida em sub-maiores e como o algoritmo está sendo aplicado a cada sub-matriz recursivamente. Isso pode ser feito visualmente "aninhando" as representações da matriz. Talvez use fundos diferentes para cada nível de recursão.
* Elementos classificados: Indique quais elementos foram colocados em suas posições finais classificadas. Use uma cor distinta ou um marcador visual.
* Execução passo a passo: Permita que o usuário percorre o algoritmo uma etapa de cada vez, para que eles possam ver claramente cada ação.
* Informações do estado: Exiba os valores atuais de `i`,` j` e outras variáveis ​​relevantes.

Tecnologias de visualização:

* JavaScript &Html5 Canvas: Uma escolha popular para visualizações baseadas na Web. Bibliotecas como D3.js ou P5.js podem ajudar com os elementos visuais.
* python (com bibliotecas como pygame ou matplotlib): Para aplicativos de mesa.
* Outras bibliotecas de gráficos: Dependendo do ambiente, outras bibliotecas como processamento, qt ou openGL podem ser usadas.

O problema com a seleção do primeiro elemento

Embora simples de implementar, sempre escolhe o primeiro elemento, pois o pivô tem uma desvantagem significativa:

* Cenário de pior caso: Se a matriz já estiver classificada (ou quase classificada) em ordem ascendente ou decrescente, o algoritmo degenera para a complexidade do tempo O (n^2). Isso ocorre porque cada partição removerá apenas um elemento * um * da sub-matriz, levando a partições muito desequilibradas.

Exemplo do pior caso:

Se a matriz for `[1, 2, 3, 4, 5]` e 1 é sempre o pivô:

1. Pivô =1. A partição resulta em `[1, 2, 3, 4, 5]` (1 está no local correto).
2. Classificar recursivamente `[2, 3, 4, 5]`
3. Pivô =2. A partição resulta em `[2, 3, 4, 5]` (2 está no local correto).
4. Classificar recursivamente `[3, 4, 5]`
... e assim por diante.

O algoritmo se torna essencialmente um tipo de seleção muito ineficiente.

Como a visualização ajuda:

A visualização demonstra claramente esse pior comportamento. Você verá o processo de particionamento demorando muito tempo para mover elementos e as chamadas recursivas criando sub-marcas muito desequilibradas. Isso torna muito óbvio por que essa simples estratégia de seleção de pivô geralmente não é a melhor escolha na prática. A visualização também pode mostrar como outros métodos de seleção de pivô (como escolher um elemento aleatório) podem evitar esse pior cenário.

Anterior :

Próximo :
  Os artigos relacionados
·Como usar vários namespaces 
·Como construir um arquivo delimitado por tabulações D…
·Como Acessar Colunas preenchimento macro com dados 
·Escreva um programa que aceite como entradas nas bordas…
·Como mover um PictureBox em VB 
·Como fazer um programa de pintura 
·Como multi-thread em Visual Basic 
·Como alterar texto do cabeçalho 
·HTML para esconder barras de rolagem em VBScript 
·Como alterar o caso de Lettering em Visual Basic 
  Artigos em destaque
·Passo-a- Passo Hibernate Tomcat MySQL Tutorial 
·Como calcular o valor das expressões Java 
·O que é um rascunho do computador? 
·Como converter HEX para RGB Cores 
·Como ocultar a lista suspensa em JavaScript 
·Como o código de um retângulo em Java com a Random Di…
·Como criar PHP /API e se conectar com Dreamweaver 
·Como desativar direcionais Chaves 
·Como girar um orçamento em JavaScript 
·Como atualizar uma declaração em Informix 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados