Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TRABAJO DE INVESTIGACIÓN
- Gnome Sort
- Sleep Sort – The King of Laziness / Sorting
while Sleeping
FECHA: 15/06/2020
Gnome sort (o "ordenamiento del duende del
jardín")
HISTORIA DEL ALGORITMO
return merge(
mergeSort(izquierda),
mergeSort(derecha)
)
}
let result = []
let indexLeft = 0
let indexRight = 0
return
result.concat(left.slice(indexLeft)).concat(right.slice(indexRight))
}
3s: dormir 8
6s: dormir 2
8s: "2" (2 se despierta así que imprímalo)
9s: dormir 9
11s: "8" (8 se despierta así que imprímalo)
18s: "9" (9 se despierta así que imprímalo)
SALIDA: 2 8 9
Implementación
Para implementar la ordenación del sueño, necesitamos funciones de
subprocesos múltiples, como _beginthread () y WaitForMultipleObjects () . Por
lo tanto, debemos incluir windows.h para usar estas funciones. Esto no se
compilará en IDE en línea . Debemos ejecutarlo en su PC (tenga en cuenta que
este código es para WINDOWS y no para LINUX).
Para realizar una ordenación del sueño, necesitamos crear subprocesos para
cada uno de los valores en la matriz de entrada. Hacemos esto usando la
función _beginthread ().
En cada uno de los hilos asignamos dos instrucciones:
1) Suspender : suspender este subproceso hasta arr [i] milisegundos (donde arr [i]
es el elemento de matriz al que está asociado este subproceso). Hacemos esto
usando la función Sleep (). La función Sleep (n) suspende la actividad asociada
con este hilo hasta 'n' milisegundos. Por lo tanto, si escribimos Suspender (1000),
significa que el hilo dormirá durante 1 segundo (1000 milisegundos = 1 segundo)
Limitaciones
Espacio auxiliar
Todas las cosas se hacen mediante la cola de prioridad interna del sistema
operativo. Por lo tanto, el espacio auxiliar puede ser ignorado.
main(int c,char**v){
#pragma omp parallel for num_threads(c)
for(int i=1;i<c;++i){int x=atoi(v[i]);sleep(x);printf("%d ",x);}}
(Compilado gcc -std=c99 -fopenmp sort.ce ignorando todas las advertencias).
3s: dormir 10
6s: dormir 9
9s: dormir 8
12s: dormir 7
13s: "10" (10 se despierta así que imprímalo)
15s: dormir 6
15s: "9" (9 se despierta así que imprímalo)
17s: "8" (8 se despierta así que imprímalo)
18s: dormir 5
19s: "7" (7 se despierta así que imprímalo)
21s: "6" (6 se despierta, así que imprímelo)
23s: "5" (5 se despierta así que imprímelo)
SALIDA: 10 9 8 7 6 5
La salida anterior es solo un ejemplo.
Obviamente, las computadoras modernas no son tan lentas (tomar 3 segundos
para explorar cada elemento).
En realidad, ejecutar el modo de suspensión en una computadora moderna en la
matriz anterior proporciona la salida: {9, 5, 7, 10, 8, 6}
JAVA
/**
* @author Lakshmi
*/
class MyThread extends Thread
{
int id ;
Thread t;
String s;
MyThread(int id)
{
this.id = id;
this.start();
}
public MyThread(String string)
{
this.id = string.length();
s = string;
this.start();
}
public void run()
{
try {
Thread.sleep(id);
if(s!= "")
System.out.println(s);
else
System.out.println(id);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
public class SleepSort
{
/**
* @param args
*/
public static void main(String[] args) {
//int a[]= {9,8,7,6};
//char a[] = {'c','v','a','d','b'};
String a[] = {"abc","def","aa"};
for(int i=0;i < a.length;i++) {
new MyThread(a[i]);
}
}
}
Java
Copy
Conclusión
La ordenación del sueño está más relacionada con el sistema operativo que
cualquier otro algoritmo de ordenación. Este algoritmo de clasificación es una
demostración perfecta de subprocesamiento múltiple y programación realizada por
el sistema operativo.
La frase "Ordenar mientras duerme" en sí misma suena muy singular. En general,
es un algoritmo divertido, vago y extraño. Pero como bien dijo alguien: "Si
funciona, entonces no es perezoso".