Tipo de fusión funcional -- performance campo con functional-programming campo con clojure campo con mergesort camp codereview Relacionados El problema

Functional Merge Sort


3
vote

problema

Español

Acabo de terminar este tipo de fusión en Clojure, estructurado de acuerdo con Ex. 22-26 de este taller .

La pregunta principal que tengo puede responderse sin pasar el tiempo de comprensión del código : 99887776655443310 se llama dos veces en if1 , es esto todavía $ mathcal {o} (n log n) $? (Últimas líneas en la muestra del código) Dado que su programación funcional, no puedo pensar en una forma de evitar el cálculo de la mitad dos veces (no puede callar el resultado en una variable).

Seguí la estructura establecida en los ejercicios, pero creo que este código está hinchado y difícil de leer. ¿Cómo mejoraría las funciones individuales al mantener la estructura general?

  if2  
Original en ingles

I just finished this Merge Sort in Clojure, structured according to ex. 22-26 of this workshop.

The main question I have can be answered without spending time understanding the code: halve is called twice in merge-sort, is this still \$\mathcal{O}(n \log n)\$? (last lines in the code sample) Since it's functional programming, I can't think of a way to avoid calculating halve twice (can't stash the result into a variable).

I followed the structure set out in the exercises, but I think this code is bloated and hard to read. How would you improve the individual functions while maintaining the general structure?

(defn my-take-r [a-list n coll]   (if (or         (= 1 n)         (singleton? coll))      (concat       a-list       (list (first coll)))      (recur       (concat a-list (list (first coll)))       (dec n)       (rest coll))))  (defn my-take [n coll]    (if (empty? coll)     `()     (my-take-r `() n coll)))  (defn my-drop [n coll]   (if (or (zero? n) (empty? coll))     (concat `() coll)     (my-drop (dec n) (rest coll))))  (defn halve [a-seq]   (let [i (int (/(count a-seq) 2))]      (vec (list            (concat `() (seq (subvec (vec a-seq) 0 i)))            (concat `() (seq (subvec (vec a-seq) i)))))))  (defn seq-merge-r [output a-seq b-seq]   (cond (and           (empty? a-seq)           (empty? b-seq)) output         (empty? a-seq) (concat output b-seq)         (empty? b-seq) (concat output a-seq)         (<           (first a-seq)           (first b-seq)) (seq-merge-r (conj output (first a-seq)) (rest a-seq) b-seq)         :else            (seq-merge-r (conj output (first b-seq)) a-seq (rest b-seq))))  (defn seq-merge [a-seq b-seq]   (seq-merge-r [] (seq a-seq) (seq b-seq)))  (defn merge-sort [a-seq]   (cond     (empty? a-seq) a-seq     (singleton? a-seq) a-seq     :else (seq-merge             (merge-sort (first  (halve a-seq)))             (merge-sort (second (halve a-seq)))))) 
           
     
     

Lista de respuestas


Relacionados problema

6  Algoritmo para encontrar inversiones en tipo MERGE  ( Algorithm for finding inversions in merge sort ) 
Ayuda en las revisiones de código para la legibilidad, optimizándola, funcionalidad, etc. import java.io.BufferedReader; import java.io.FileNotFoundExcepti...

7  Merge Sort en JavaScript  ( Merge sort in javascript ) 
Implementé este tipo de fusión en JS y noté que para los números de enteros aleatorios es mucho más rápido que la construcción en funciones de tipo de todos l...

1  Merge Sort in PHP - Mi primera exposición algorítmica a PHP 5  ( Merge sort in php my first algorithmic exposure to php 5 ) 
Tengo este pequeño programa en PHP implementando una especie de combinación. Utilicé una optimización de tiempo de ejecución bastante simple mediante el uso d...

2  Algoritmo de Mergesort en C  ( Mergesort algorithm in c ) 
Tengo esta implementación de Mergesort que tiene exactamente la misma API que qsort : : Mergesort.h : #ifndef MERGESORT_H #define MERGESORT_H #inclu...

2  Fusión natural Sort En C  ( Natural merge sort in c ) 
Tengo esta implementación C del tipo de combinación natural: #include "stable_sort.h" #include <stdbool.h> #include <stdlib.h> #include <stdio.h> #include ...

12  Fusionar una especie de una matriz entera  ( Merge sort an integer array ) 
He implementado fusionar una matriz entera. ¿Está bien usar I, J, k como nombre de variable para bucle? ¿Debo cambiarlos a nombres más significativos? En gene...

2  Merge rápido en JavaScript  ( Fast merge sort in javascript ) 
Al desarrollar una interfaz de usuario que permite la clasificación por varios campos diferentes, noté que Array.prototype.sort() es extremadamente lento pa...

5  Memoria / Performance of Merge Sort Code  ( Memory performance of merge sort code ) 
Escribí un código de tipo de combinación para un poco de bocadillo nocturno. Lo he puesto trabajando, pero solo estaba mirando a aprender si me faltaba algo e...

6  Fusionar la implementación de ordenación en Java  ( Merge sort implementation in java ) 
¿Puedes revisar mi implementación de tipo de fusión? De todas mis pruebas, parece que funciona, pero solo quería asegurarme de que lo estoy haciendo lo mejor ...

2  Fusionar la implementación de Sort Java  ( Merge sort java implementation ) 
¿Puede alguien revisar mi implementación de tipo de fusión en Java? ¿Es bueno / malo y puede mejorarse más? public class MyMergeSort { private int [] d...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos