[Archives] Mathématiques pures, physique, chimie, etc. : problèmes d'entraînement cérébral sans rapport avec le commerce. - page 584

 
alsu:

En un seul passage :

Créer une copie vide d'un tableau de la même taille, l'initialiser avec deux.

Reprenez depuis le début du tableau. Rencontre 1 - écrire sur la copie du début, rencontre 3 - écrire sur la copie de la fin.


Et initialiser par deux (66% d'inutilité en moyenne) n'est pas une réussite ?
De plus, vous devez surveiller les tireurs à trois points en même temps !
 
GaryKa:

Je vais vous donner une petite tâche.

Bien sûr, c'est un hack, mais lors des entretiens d'embauche, il fonctionne comme une apothéose de la connaissance du tri des tableaux ;))


Donc, la tâche de trier

Il existe un tableau de N cellules, dans lequel les uns, les deux et les trois sont placés dans un ordre aléatoire.

Construisez le meilleur algorithme de tri.


Comptez sur un passage, remplissez le tableau sur le second passage.
 
alsu:

En un seul passage :

Créer une copie vide d'un tableau de la même taille, l'initialiser avec deux.

Reprenez depuis le début du tableau. Si l'on rencontre 1, on écrit dans la copie du début ; si l'on rencontre 3, on écrit dans la copie de la fin.

Sans copie (ou vous direz que remplir la copie est un passage séparé).

n=0, m=0

Commencez au début du tableau. Si nous rencontrons 1 - changez-le avec le n-ième élément du début, non égal à 1 (par construction, ce sera toujours 2), n++ ; si nous rencontrons 3 - changez-le avec le m-ième élément de la fin, non égal à 3, m++, et si nous rencontrons 1, nous suivons les étapes de la première partie.

 
alsu:

Sans copie (ou vous direz que remplir la copie est un passage séparé)

n=0, m=0

Nous partons du début du tableau. Si nous rencontrons 1, nous le changeons avec le n-ième élément du début non égal à 1 (par construction ce sera toujours 2), n++ ; si nous rencontrons 3, nous le changeons avec le m-ième élément de la fin non égal à 3, m++, et si nous rencontrons 1, nous procédons comme décrit dans la première partie.


une demi-passe en moyenne, plus le même temps pour les échanges
 
alsu:

Sans copie (ou vous direz que remplir la copie est un passage séparé)

n=0, m=0

Nous partons du début du tableau. Si nous rencontrons 1, nous le changeons avec le n-ième élément du début non égal à 1 (par construction ce sera toujours 2), n++ ; si nous rencontrons 3, nous le changeons avec le m-ième élément de la fin non égal à 3, m++, et si nous rencontrons 1, nous procédons comme décrit dans la première partie.



C'est une bonne façon de faire.
 
alsu:
Réduire le nombre de passages ne permet pas toujours d'augmenter la vitesse.
 
L'échange de deux éléments d'un tableau se fait en 3 opérations. Il est peu probable qu'il soit plus rapide.
 
TheXpert:
Réduire le nombre de passages ne permet pas toujours d'augmenter la vitesse.
Eh bien, le critère d'optimalité n'est pas fixé...
 
Permettez-moi de soulever une question :
A+B=...
 
alsu:

Sans copie (ou vous direz que remplir la copie est un passage séparé)

n=0, m=0

Nous partons du début du tableau. Si nous rencontrons 1, nous le changeons avec le n-ième élément du début non égal à 1 (par construction ce sera toujours 2), n++ ; si nous rencontrons 3, nous le changeons avec le m-ième élément de la fin non égal à 3, m++, et si nous rencontrons 1, nous procédons comme décrit dans la première partie.



Bonne idée.