Comparaisons du tri fusion : pire cas et cas moyen
Ce calculateur estime le nombre de comparaisons entre éléments qu’effectue un tri fusion descendant standard sur n éléments.
Lancer gratuitement
Il fournit le pire cas exact, l’espérance pour un ordre aléatoire uniforme, le nombre de niveaux récursifs et n multiplié par le logarithme de n en base 2 comme repère. Vous pouvez ainsi visualiser la croissance linéarithmique et la distinguer clairement d’un comportement quadratique.
Ce que le calculateur comptabilise
Le calcul porte sur les comparaisons d’ordre entre éléments pendant la fusion, opération centrale de l’analyse classique du tri fusion. Il exclut les contrôles d’indice, affectations, écritures temporaires, appels récursifs, allocations et opérations internes d’un comparateur personnalisé. Un élément seul ne demande aucune comparaison. Pour une entrée plus grande, l’algorithme divise la plage, trie les deux parties puis compare leurs premiers éléments non consommés. La fusion de groupes de a et b éléments exige au maximum a plus b moins une comparaisons, car le dernier élément restant est copié sans nouvelle comparaison. Le pire cas applique cette règle à l’arbre de découpage réel, même lorsque n n’est pas une puissance de deux. Le champ n_log2_n constitue donc un repère d’échelle, tandis que les champs de comparaison donnent les estimations opérationnelles.
Calcul du pire cas et du cas moyen
La formule exacte du pire cas vaut n fois le plafond du logarithme de n en base 2, moins deux élevé à ce plafond, plus un. Elle décrit un tri fusion binaire standard dont les sous-tableaux sont partagés aussi équitablement que possible. Le cas moyen est une espérance sur les permutations uniformément aléatoires de clés distinctes. Pour la fusion de séquences de a et b éléments, l’espérance vaut a plus b, moins a divisé par b plus un, moins b divisé par a plus un. Le calculateur additionne récursivement ces coûts sur le même arbre équilibré et n’arrondit que l’affichage final à six décimales. Une espérance peut être fractionnaire, bien que toute exécution réalise un nombre entier de comparaisons. Les doublons, une autre règle de départage, les séquences naturelles ou un seuil de tri par insertion peuvent modifier le résultat observé.
Interpréter le résultat linéarithmique
La valeur n_log2_n matérialise l’échelle linéarithmique. Chaque niveau de fusion supplémentaire traite les n éléments, alors que le nombre de niveaux ne croît que logarithmiquement. Les deux rapports divisent les estimations par n fois le logarithme de n en base 2 et indiquent leur proximité avec ce repère pour n supérieur à un. Ils restent descriptifs : ce ne sont ni des preuves de complexité ni des mesures matérielles. Les accès mémoire, allocations, caches, coûts du comparateur et environnements d’exécution peuvent dominer le temps réel. Essayez des tailles juste avant et après les puissances de deux. La profondeur récursive change à ces frontières et montre pourquoi la notation grand O masque constantes et termes inférieurs sans les rendre négligeables pour une taille précise.
Cas d’usage
Prévoir un comparateur coûteux
Estimez ses appels avant de lancer un tri stable sur un grand jeu d’enregistrements.
Expliquer la croissance algorithmique
Comparez les totaux exacts à n multiplié par le logarithme de n en base 2.
Fixer les attentes des tests
Définissez un plafond de pire cas pour une implémentation instrumentée.
Questions fréquentes
Que désigne une comparaison ici ?
Une comparaison d’ordre entre éléments durant la fusion ; la gestion et les déplacements de données sont exclus.
Pourquoi la moyenne peut-elle être fractionnaire ?
Il s’agit d’une espérance sur toutes les permutations aléatoires uniformes, pas du total d’une exécution.
L’estimation inclut-elle les doublons ?
Non. Le modèle moyen suppose des clés distinctes ; les doublons et départages peuvent changer le total.
S’agit-il d’un benchmark ?
Non. Le calcul ne modélise ni mémoire, ni processeur, ni environnement, ni allocation, ni latence du comparateur.
Quelle variante du tri fusion est modélisée ?
La variante binaire descendante standard, avec des moitiés aussi équilibrées que possible.
Quel est le prix d’une requête API ?
Chaque requête API coûte $0.002 ; le navigateur peut employer la même logique déterministe.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev/merge-sort-comparisons \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":8}'const res = await fetch("https://api.kit.forhosting.com/dev/merge-sort-comparisons", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/merge-sort-comparisons",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/merge-sort-comparisons", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/merge-sort-comparisons", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"n": 8
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.merge_sort_comparisons",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |