Y a-t-il une fonction soignée dans Julia qui fusionnera deux tableaux triés et retourner la matrice de tri pour moi? J'ai écrit: mais n'y a pas de fonction native dans la base Julia pour faire cela? P> p>
4 Réponses :
Non, Cette fonction n'existe pas . Et en fait, je n'ai pas vu une langue qui a une telle fonction hors de la boîte. P>
Pour ce faire, vous devez conserver deux pointeurs dans chacun des tableaux, comparer les valeurs et déplacer le plus petit (basé sur ce que je vois, c'est exactement ce que vous faites). P>
Contrairement aux autres réponses, il y a en fait une méthode pour le faire dans la base Julia. Mais cela ne fonctionne que pour les tableaux d'entiers, et cela ne fonctionnera que si les tableaux sont uniques (en ce sens qu'aucun entier n'est répété dans l'une ou l'autre des matrogues). Utilisez simplement le type code> code> comme suit: Si vous exécutez le code ci-dessus, vous remarquerez que la fonction Bien sûr, ce qui précède n'est pas vraiment dans l'esprit de la question, qui préoccupe davantage une solution pour tout type pour lequel l'opérateur Voici une fonction qui trouve efficacement l'union de Deux vecteurs uniques des em> les . Je n'ai jamais eu besoin d'un cas non unique moi-même, je n'ai donc pas écrit de fonction qui couvre ce cas, je crains que je crains: p> Une autre option est de regarder Dictionnaires triés, disponible dans le Datastructures.jl Package. Je ne l'ai pas fait moi-même, mais une méthode qui insère simplement toutes les observations dans un dictionnaire trié (vérification de la duplication de clé à votre guise), puis itière sur Union code> supprime les doublons À partir de la sortie, c'est pourquoi j'ai initialement indiqué que vos matrices doivent être uniques (sinon vous devez être heureux de disposer de duplicats supprimés dans la sortie). Vous remarquerez également que l'opération
Union code> sur le (code> Intect code> fonctionne beaucoup em> plus rapide que
Union code> sur un tri trié
Vecteur {int} code>, puisque l'ancien exploite le fait qu'un composant
code> est pré-trié. P>
lt code> est défini, ainsi que permettant des doublons. p>
(touches, valeurs) code> devrait également être une moyen efficace d'attaquer ce problème. p> p>
@Lindon Malheureusement, il n'y avait pas beaucoup de soutien pour la série Time à Julia, j'ai regardé. Les colis qui existent ont tendance à fournir simplement un cadre de base plutôt que les optimisations et les fonctions spécialisées que l'on pourrait éventuellement vouloir. Je pense que la plupart des parties intéressées se concentrent sur l'obtention de cadres de données à un niveau "Best-Business" pour l'instant et que la série temporelle prend un siège arrière. J'ai écrit un peu juste, mais n'a pas encore eu l'occasion de l'ajouter officiellement. C'est bon d'entendre qu'il y a plus de séries métriques trouvant Julia! :-)
Bien que une fonction explicite pour fusionner deux vecteurs triées semble manquer, on peut être construit facilement à partir des blocs de construction existants (la question en a réellement démontré, mais cela ne définit pas une fonction).
La méthode suivante essaie de tirer parti du code code> existant code> et restez toujours efficace. p>
en code: p> Ce qui suit est un exemple suivant: p> je n'ai pas Benchmark La fonction, mais Quicksort (l'algorithme de tri par défaut) est généralement bonne performance sur des tableaux pré-triés. Il convient donc d'être correct et l'attribution d'un vecteur de résultat est requise dans n'importe quelle mise en œuvre. P> P>
Je continue à venir sur ceci dans différents projets, j'ai donc fait un forfait fusiforré ( https: // github .COM / VVJN / MERGESORTED.JL ). Vous pouvez l'utiliser comme suit.
a = sort!(rand(1000), order=Base.Reverse) b = sort!(rand(1000), order=Base.Reverse) c = mergesorted(a,b, order=Base.Reverse) sort!(vcat(a,b), order=Base.Reverse) == c