Come ordinare le frazioni (piccoli numeri)

1

Abbiamo 100.000 frazioni: Prendiamo in considerazione le seguenti frazioni. p / (2 ^ q) tale che 0 < = p, q < = 10

Come puoi vedere ci sono < = 10 * 10 diverse frazioni, ma abbiamo 100.000 che dobbiamo ordinare (quindi ci sono piccoli elementi unici).

L'attività consiste nel pensare un algoritmo veloce per ordinare le frazioni.

Ti chiedo di guardare la mia proposta e mostrarmi le tue idee. (Suppongo che le frazioni siano date dalla coppia, ad esempio: p / q < ---- > (p, q) ) su input abbiamo array a

La mia idea:

for i = 1 to n do t[i] = a[i].first * 2^(10)
countsort (t)
bring results from t to a (remember about / 2^10)
    
posta user220688 13.07.2015 - 19:19
fonte

1 risposta

3

Innanzitutto, la tua definizione dei tuoi numeri può portare a non frazioni (ad es. p = 2, q = 0).

In secondo luogo, per riassumere la tua idea:

  1. Salva tutte le tue frazioni come numeri interi
  2. Esegui un ordinamento intero
  3. Converti tutti i numeri interi in frazioni

Sembra un sacco di memoria e tempo inutili quando è possibile eseguire molti algoritmi di ordinamento utilizzando un semplice confronto e puoi lasciare i tuoi dati nella loro forma originale.

Con un ordinamento di confronto, devi solo implementare un operatore di confronto personalizzato che sfrutta la conoscenza delle tue frazioni specializzate. Ad esempio in C ++, è possibile utilizzare la funzione sort integrata e implementare il proprio comparatore.

La funzione comparatore compare(a,b) deve solo restituire true se la frazione a è inferiore alla frazione b altrimenti restituisce false. Ad esempio, questa funzione può sfruttare il fatto che moltiplicare per 2 può essere fatto come un bit shift. Quindi il tuo confronto potrebbe sembrare qualcosa di simile

a.first * (1 << b.second) < b.first * (1 << a.second)
    
risposta data 13.07.2015 - 22:38
fonte

Leggi altre domande sui tag