Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577

    [c] algoritmo di ricerca

    devo implementare, anzi, ho implementato un banale algoritmo per il confronto di dati duplicati ma è troppo lento. Si tratta di confrontare più di 800000 stringhe e il metodo che uso io, prendi la prima stringa e confrontala con le altre n+1, poi la seconda con n+2 etc... impiega almeno 8 ore di elaborazione: che algoritmi esistono più performanti?

    grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Metti i dati in ordine, con un algoritmo veloce.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    grazie

    mi era venuto in mente di riordinare con quick sort ma poi?

    Mi devo posizionare velocemente sulle prime due uguali: un while? credo, quindi confrontare le successive e quando diverse fare qualcosa d'altro, magari tornare al while?

  4. #4
    Ordini con il quicksort (O(n log n)), quindi per individuare gli elementi duplicati ti basta scorrere l'array una sola volta, visto che nell'array ordinato tutti i duplicati dello stesso elemento sono consecutivi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Ordini con il quicksort (O(n log n)), quindi per individuare gli elementi duplicati ti basta scorrere l'array una sola volta, visto che nell'array ordinato tutti i duplicati dello stesso elemento sono consecutivi.
    quindi in luogo di due cicli nidificati ne hai uno solo che confronta l'elemento n e n+1 giusto?

  6. #6
    Esattamente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    grazie ad entrambi

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    implementato, 8 ore di elaborazione contro qualche manciata di secondi

  9. #9
    È un classico esempio di come scalano i tempi in maniera diversa a seconda degli algoritmi utilizzati: nel tuo primo caso avevi un algoritmo O(n^2), mentre il nuovo algoritmo è O(n log n) + O(n) = O(n log n), la differenza è molto evidente...
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    grazie per avermi rinfrescato la memoria

    Dove O(n log n) è relativo al quick sort e O(n) al ciclo, ricordo giusto?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.