[Arquivo!] Pura matemática, física, química, etc.: problemas de treinamento do cérebro não relacionados ao comércio de qualquer forma - página 584

 
alsu:

Em um passe:

Criar uma cópia vazia de uma matriz do mesmo tamanho, inicializá-la com dois exemplares.

Vá desde o início da matriz. Encontro 1 - escrever para a cópia desde o início, encontro 3 - escrever para a cópia desde o final.


E inicializar por dois (66% inúteis em média) não é um passe?
Além disso, você tem que monitorar três indicadores ao mesmo tempo!
 
GaryKa:

Eu lhe darei uma pequena tarefa.

É claro que é um hack, mas em entrevistas de trabalho funciona como uma apoteose do conhecimento de ordenação de matriz ))


Portanto, a tarefa de classificação

Há um conjunto de células N, nas quais as um, dois e três são colocadas em ordem aleatória.

Construir o melhor algoritmo de triagem.


Conte com um passe, preencha a matriz no segundo passe.
 
alsu:

Em um passe:

Criar uma cópia vazia de uma matriz do mesmo tamanho, inicializá-la com dois exemplares.

Vá desde o início da matriz. Se for encontrado 1, escreva para a cópia desde o início; se for encontrado 3, escreva para a cópia desde o final.

Sem cópia (ou você dirá que o preenchimento da cópia é um passe separado).

n=0, m=0

Comece no início da matriz. Se encontrarmos 1 - mudá-lo com n-ésimo elemento desde o início, não igual a 1 (por construção será sempre 2), n+++; se encontrarmos 3 - mudá-lo com m-ésimo elemento desde o final, não igual a 3, m+++, e se encontrarmos 1, seguimos os passos da primeira parte.

 
alsu:

Sem cópia (ou você dirá que o preenchimento da cópia é um passe separado)

n=0, m=0

Nós vamos desde o início da matriz. Se encontrarmos 1, o trocamos com n-ésimo elemento desde o início não igual a 1 (por construção será sempre 2), n+++; se encontrarmos 3, o trocamos com m-ésimo elemento desde o final não igual a 3, m+++, e se encontrarmos 1, procedemos como descrito na primeira parte.


uma média de meio passe, mais a mesma quantidade de tempo para trocas
 
alsu:

Sem cópia (ou você dirá que o preenchimento da cópia é um passe separado)

n=0, m=0

Nós vamos desde o início da matriz. Se encontrarmos 1, o trocamos com n-ésimo elemento desde o início não igual a 1 (por construção será sempre 2), n+++; se encontrarmos 3, o trocamos com m-ésimo elemento desde o final não igual a 3, m+++, e se encontrarmos 1, procedemos como descrito na primeira parte.



Esse é um ótimo caminho a seguir.
 
alsu:
A redução do número de passes nem sempre dá um aumento de velocidade.
 
A troca de dois elementos de uma matriz é 3 operações. É pouco provável que seja mais rápido.
 
TheXpert:
A redução do número de passes nem sempre dá um aumento de velocidade.
Bem, o critério de otimização não está definido...
 
Deixe-me levantar uma questão:
A+B=...
 
alsu:

Sem cópia (ou você dirá que o preenchimento da cópia é um passe separado)

n=0, m=0

Nós vamos desde o início da matriz. Se encontrarmos 1, o trocamos com n-ésimo elemento desde o início não igual a 1 (por construção será sempre 2), n+++; se encontrarmos 3, o trocamos com m-ésimo elemento desde o final não igual a 3, m+++, e se encontrarmos 1, procedemos como descrito na primeira parte.



Boa idéia.