Plutôt que de coder cela, je pense que je vais le pseudo-coder par étapes et expliquer ma logique, afin que de meilleurs programmeurs puissent percer des trous dans ma logique si nécessaire.
Sur la première étape, nous commençons avec une liste de nombres de longueur n. Pour chaque nombre, nous devons créer une liste de longueur n-1 car nous n'ajoutons pas de nombre à lui-même. À la fin, nous avons une liste d'environ n listes triées qui a été générée en un temps O(n^2).
step 1 (startinglist)
for each number num1 in startinglist
for each number num2 in startinglist
add num1 plus num2 into templist
add templist to sumlist
return sumlist
À l'étape 2, parce que les listes ont été triées par conception (ajoutez un numéro à chaque élément dans une liste triée et la liste sera toujours triée), nous pouvons simplement faire un tri par fusion en fusionnant chaque liste plutôt que de trier par fusion tout le lot. Au final cela devrait prendre O(n^2) temps.
step 2 (sumlist)
create an empty list mergedlist
for each list templist in sumlist
set mergelist equal to: merge(mergedlist,templist)
return mergedlist
La méthode de fusion serait alors l'étape de fusion normale avec une vérification pour s'assurer qu'il n'y a pas de sommes en double. Je n'écrirai pas cela parce que n'importe qui peut rechercher mergesort.
Voilà donc ma solution. L'algorithme entier est en temps O(n^2). N'hésitez pas à signaler toute erreur ou amélioration.