Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    [C++] binary_search (Riapro spiegandomi meglio)

    //di seguito ricopio il testo del primo topic

    //primo topic
    Salve ragazzi, tra poco parteciperò alla competizione regionale di informatica e potrei avere bisogno di un algoritmo di ricerca con complessità logaritmica O(log N), cercando in internet ho trovato la binary_search, molto veloce da scrivere e pratica, ma essa non ritorna un valore ma solo un booleano che mi dice se il valore è presente o no, esiste qualche funzione standard C++ o standard C con complessità logaritmica (anche una binary_search) che mi ritorni la posizione dell'elemento trovato, di solito lavoro con int *, quindi non ho bisogno di iteratori.

    Se non c'è dovrei scriverla al momento, ma in quel genere di competizioni il tempo è fondamentale, quindi se riesco a trovare la "pappa pronta" sarebbe meglio, come con sort in C++, dato che di problemi ce ne saranno di più grossi e non voglio perdere tempo a scrivere algoritmi.

    Grazie mille, spero che esista una soluzione
    //adeso spiego
    Le competizioni di informatica sono strutturate in modo che il partecipante non venga "premiato" perchè sa scrivere bene gli algoritmi, altrimenti uno si impara token per token gli algoritmi di ordinamento, etc ed è apposto, ma nell'abilità nel capire se per risolvere un dato problema si può o meno, in che modo e magari con qualche modifica, applicare una serie di algoritmi conosciuti al programmatore.

    Come è scritto e consigliato ESPRESSAMENTE nella guida preparativa fornita dall'ORGANIZZATORE dei giochi di informatica in italia:
    http://www.olimpiadi-informatica.it/ -> Documentazione -> Syllabus e materiale didattico -> Guida alle selezioni territoriali -> http://81.208.32.83:8080/ioi/files/Guida%20selezioni%20territoriali.pdf

    e più precisamente cito i passaggi:

    //guida ufficiale
    Dovendo quindi usare un ordinamento durante un problema di gara una soluzione potrebbe essere quella di utilizzare un algoritmo scritto “al volo”; questo però comporterebbe principalmente tre tipi di problemi:
    • perdita di tempo per la scrittura dell’algoritmo (anche il più semplice degli algoritmi di ordinamento richiede qualche minuto per essere implementato)
    • semplicità dell’algoritmo implementato: probabilmente si ricadrebbe sull’algoritmo bubblesort, che è molto semplice da implementare correttamente, ma ha delle prestazioni non buone, di tipo O ( N^2 )
    • possibilità di commettere degli errori: anche un algoritmo semplice come il bubble-sort può comunque essere soggetto a errori di implementazione, dove un algoritmo come il quicksort ha sicuramente buone probabilità di essere scritto male, soprattutto in un contesto come quello delle gare dove si ha poco tempo a disposizione e si è sotto tensione Utilizzare invece le funzioni di libreria permette di evitare questi problemi, al solo costo di impararne il funzionamento.
    Per questo consigliano di usare le funzioni sort e qsort, che sono nient'altro che "pappa pronta" ma durante una competizione se si ha a disposizione un algoritmo con complessità computazionale O( N log N) e più semplice da implementare di sicuro non si va a perdere tempo con BubbleSort o Inserzione.

    Per le stesse ragioni, quando si effettua una ricerca, la guida invita ad usare binary_search o bsearch

    //guida ufficiale riguardo a binary_search
    Pur essendo un algoritmo apparentemente semplice, l’implementazione durante una gara potrebbe dare dei problemi: anche in questo caso, se usiamo il C o il C++, ci vengono in soccorso le librerie standard con l’algoritmo bsearch nel caso nel C e con binary_search nel caso del C++.
    Quello che però trovo poco utile è che essi ritornano solo un booleano, come detto nel primo topic e chiedo a voi, perchè google non mi ha aiutato, se esiste una funzione simile a binary_search che non abbia una complessità computazionale troppo elevata e che segua la linea di principio proposta dalla guida ossia che IL TEMPO E' PREZIOSO, ci sono infatti 3 quesiti a difficoltà crescente in sole 3 ore, basta sbagliare un carattere e si possono perdere decide di minuti di debug per trovare l'errore.

    Se ahimè non esiste chiedo a voi consiglio per scrivere unendo le forze, perchè da solo è difficilino, un'algoritmo che, in accordo col pensiero dell'autore della guida, sia semplice e veloce da implementare.

    Spero di essere compreso adesso e sinceramente mi ha dato molto fastidio essere trattato così nel primo topic dato che non mi sembra di aver chiesto tutte queste eresie come sono stato accusato.

    Grazie della collaborazione.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Originariamente inviato da kirakira93
    Spero di essere compreso adesso e sinceramente mi ha dato molto fastidio essere trattato così nel primo topic dato che non mi sembra di aver chiesto tutte queste eresie come sono stato accusato.
    Tu pensa, invece, il fastidio di chi ha letto il tuo post e ha giustamente (perchè in altro modo non poteva proprio essere interpretato, senza ulteriori indicazioni) capito che ti serviva qualcuno che realizzasse al posto tuo e aggratisse del codice, mentre in questo forum si discutono di problemi di programmazione su del proprio codice.

    Hai poco da infastidirti: se non spieghi per bene tu il tuo problema (cosa espressamente richiesta dal regolamento interno) e lasci gli altri a facili fraintendimenti, non prendertela con chi poi te lo fa notare e ti chiude, giustamente, la discussione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    non hai tutti i torti

    Diciamo che non hai tutti i torti, ma ritornando al problema...qualcuno ha idee?

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Grazie!

    Grazie mille shodan è proprio quello che cercavo!

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ecco una lista degli algoritmi di ordinamento:
    http://en.wikipedia.org/wiki/Sorting_algorithm
    Ma sappi che più la complessità dell' algoritmo è bassa, più le condizioni sono restrittive.
    Ad esempio il counting sort ha complessità lineare (O(n)), ma solo se il numero degli elementi da ordinare è di ordine superiore o dello stesso ordine della differenza tra il più grande valore nell' array e il valore più piccolo.

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il bogo sort è il mio preferito
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.