elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda algoritmo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda algoritmo  (Leído 1,849 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
duda algoritmo
« en: 8 Junio 2019, 10:42 am »

Bueno  queria saber si puedo resumir mas el algoritmo quick sort de 27 lineas para que no sea tan largo y hacerlo similar al de bogosort pero sin trampa, el codigo de quicksort me lo se de memoria el de bogosort tambien  ;-)


« Última modificación: 8 Junio 2019, 23:21 pm por Beginner Web » En línea

7w7
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: quicksrot & bogosort
« Respuesta #1 en: 8 Junio 2019, 13:21 pm »

Hay infinidad de implementaciones para un mismo algoritmo por lo que puedes poner tu implementación y así es más fácil decirte si puedes simplificarlo más. La otra opción es esperar que alguien lo tenga más simplificado y te lo mande...
Y no sé a qué te refieres con "pero sin trampa". He supuesto que es a no poner varias instrucciones en una línea para reducir el número de líneas, motivo por el cual no es muy bueno medir la simplificación de un código por su número de líneas. :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: quicksrot & bogosort
« Respuesta #2 en: 8 Junio 2019, 15:23 pm »

Tal como te señala YreX-DwX, un algoritmo no se puede medir por su número de líneas.
A menudo un algoritmo que te funciona muy bien y es muy escueto, le acabas añadiendo el doble de líneas y luego resulta mucho más rápido.

En general el hecho de añadir alguna que otra línea, por ejemplo al asignar valores, puede que su ejecución solo sea pocas veces, y a cambio ahorre muchas ejecuciones dentro de un bucle.

Más bien considera algoritmos de líneas breves (aunque ineficiente) como solución para problemas pequeños... Por ejemplo el ordenamiento de burbuja es el más lento, pero para ordenar pequeñas colecciones de hasta unas decenas (no más de 50 elementos) todavía planta cara a los más eficientes.
Justo cuanto más cantidad de elementos deban ser ordenados tanto más importante se hace la eficiencia del algoritmo usado.

Por cierto el 'bogosort' (más bien bobo-sort), bajo mi punto de vista no es un algoritmo, de ordenamiento ni debiera aparecer por parte alguna.

Pon el código que tienes y se ve de hacerlo más eficiente...
En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: quicksrot & bogosort
« Respuesta #3 en: 8 Junio 2019, 21:12 pm »

lo se bebes, cuando decia sin trampa me referia justamente a eso, a no escribir todo en una sola linea de codigo, mi intencion es reducir los pasos y de esa manera hacerlo mas compacto porque todo se puede compactar tranquilamente solo que con este algoritmo no me sale  :laugh:

Código
  1. void quick_sort(arreglo &a, int izq, int der)
  2. {
  3. int i, j, pivote, aux;
  4. i=izq;
  5. j=der;
  6. pivote=a[(izq+der)/2];
  7. while(i<=j){
  8. while(a[i]<pivote)
  9. i++;
  10. while(a[j]>pivote)
  11. j--;
  12. if(i<=j){
  13. aux=a[i];
  14. a[i]=a[j];
  15. a[j]=aux;
  16. i++;
  17. j--;
  18. }
  19. }
  20. if(izq<j)
  21. quick_sort(a, izq, j);
  22. if(i<der)
  23. quick_sort(a, i, der);
  24. }

« Última modificación: 8 Junio 2019, 22:15 pm por Beginner Web » En línea

7w7
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: quicksrot & bogosort
« Respuesta #4 en: 8 Junio 2019, 21:55 pm »

Si quieres quitar líneas claro que puedes, a costa de perder legibilidad:
  • Las líneas 4, 5 y 6 las puedes poner junto a las declaraciones. (3 líneas menos)
  • Los <if> y <while> con una sola sentencia dentro, puedes quitar las llaves. (4 líneas menos)
  • Puedes cambiar un poco los incrementos. (8 líneas menos contando las 4 líneas menos anteriores)

Ganancias en eficiencia? Ninguna
Pérdidas en legibilidad? Muchas
 :rolleyes: :rolleyes: :rolleyes: :rolleyes:
Si quieres ganar un poco en eficiencia lo único que te diría es que los incrementos y decrementos los hagas en prefijo <++i> es ligeramente mejor que <i++>. Pero tampoco creas que te van a mejorar los tiempos de ordenación por hacer eso.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Python - Duda Algoritmo
Scripting
h0oke 7 4,996 Último mensaje 30 Marzo 2010, 03:12 am
por h0oke
Duda Algoritmo de Ordenamiento
Programación General
kernel19 4 3,446 Último mensaje 27 Diciembre 2010, 16:54 pm
por BgCRaCK
duda con algoritmo
Programación General
z_ane_666 1 2,745 Último mensaje 5 Mayo 2011, 23:40 pm
por Valkyr
Duda con algoritmo facil
Ejercicios
NachoEx 2 3,794 Último mensaje 6 Marzo 2013, 21:46 pm
por NachoEx
[C][?] Duda con algoritmo en C
Programación C/C++
doSomething() 4 2,526 Último mensaje 30 Mayo 2019, 17:58 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines