Discussion:Tri fusion

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Une page de Wikipédia, l'encyclopédie libre.
Autres discussions [liste]
  • Admissibilité
  • Neutralité
  • Droit d'auteur
  • Article de qualité
  • Bon article
  • Lumière sur
  • À faire
  • Archives
  • Commons

Suggestion de modification de l'implémentation Haskell[modifier le code]

Je propose une version un peu différente de l'implémentation haskell :

  triFusion' [] = []
  triFusion' [a] = [a]
  triFusion' l =
  let
   fusion' [] l = l
   fusion' l [] = l
   fusion' l1@(x:xs) l2@(y:ys)
      | x > y = y:fusion l1 ys
      | otherwise = x:fusion xs l2
   partageListe' [] = ([],[])
   partageListe' [a] = ([a],[])
   partageListe' (a:b:l) = (a:as,b:bs) where (as,bs) = partageListe' l 
   (g,d) = partageListe' l
in fusion' (triFusion' g) (triFusion' d)

En gros, j'ai juste explicité le SplitAt, en utilisant un algorithme un peu différent. Je pense qu'elle serait plus instructive (pour savoir comment faire le split sans utiliser une fonction toute faite), et en plus elle me semble potentiellement plus efficace dans l'idée (un seul parcours de la liste au lieu de deux, un pour length et un pour split) (par contre, elle n'est pas récursive terminale pour des raisons de clarté).

Elle me semble donc préférable, mais n'étant pas un codeur haskell moi même j'ai préféré ne pas prendre l'initiative d'alourdir le code.

Bluestorm 2 mars 2007 à 17:55 (CET)[répondre]

Je pense que l'intérêt de mettre une version Haskell de l'algorithme est d'en proposer une implémentation lisible, vu que le tri-fusion est loin d'être le mieux dans un lanage fonctionnel avec des listes chaînées. Je prèfere donc la version avec splitAt (length xs `div` 2) xs qui montre mieux qu'on prend deux moitiés de tableau pour les fusionner ensuite après les avoir trié. Lunar 2 mars 2007 à 18:25 (CET)[répondre]