2011-12-29 20 views
6

Questa è una domanda ampia, ma vorrei conoscere le opinioni degli esperti. Mi sono imbattuto in un documento Suffix arrays – a contest approach, ho anche trovato alcuni commenti che il partecipante dovrebbe essere pronto con tali strutture di dati già in mano. ora un sacco di puzzle di programmazione online arrivano con il tempo limitato. Quindi mi piacerebbe sapere quali sono le altre strutture/algoritmi di dati con cui si dovrebbe essere pronti.Approccio al concorso di programmazione

+0

Forse una soluzione migliore per [codegolf.se]? – mac

risposta

1

Dai un'occhiata a questi featured articles @ TopCoder. Sono davvero fantastici.

Mentre ci sei, ti suggerisco di prendere parte ai concorsi di programmazione su TopCoder. Perché il modo migliore per migliorare è praticare & continuare a partecipare a tali concorsi.

Anche Project Euler è davvero avvincente.

0

Inoltre, dare un'occhiata al libro Programming Challenges, è un ottimo riferimento sull'argomento - presenta gli argomenti necessari per avere successo in un concorso di programmazione, supportato da un giudice online.

11

Sono in competizione da circa 10 anni e ho creato una libreria non proprio cattiva. La maggior parte dei concorrenti molto validi hanno i loro blog, ad esempio la leggenda Petr Mitrichev e lì spiegano le idee che hanno avuto su alcuni problemi competitivi. Leggere questi può aiutarti - se vedi una buona idea implementala e salvala. Aggiungo algoritmi alla mia libreria quando vedo un problema che li riguarda. In questo modo posso verificare che la mia implementazione sia corretta, aggiungo solo un algoritmo se ho superato almeno un problema con la sua implementazione.

Ecco una lista con alcuni degli algoritmi ho:

  • Ho una vasta libreria geometrial con classi rappresentanti punti, linee, poligoni, segmenti, cerchi e alcune operazioni con essi (per esempio intersezione, convesso di un insieme di punti, ecc)
  • Tarjan di algorithm per componenti fortemente connesse
  • Dinitz algoritmo flusso
  • attuazione corrispondenza Bipartite
  • min Costo implementazione max flusso
  • Aho-Corasic stringa algoritmo di ricerca
  • Knuth-morris-pratt stringa algoritmo di ricerca
  • Rabin-Karp stringa algoritmo di ricerca
  • Il tempo lineare albero suffisso utilizzando algorithm
  • elevamento a potenza Fast ukonnen
  • implementazione polinomio
  • Grande implementazione intera
  • numeri frazionari di implementazione
  • implementazione della classe Matrix
  • Primo fattorizzazione
  • Eratosthenes Sieve
  • Segment Tree
  • Hungarian algorithm
  • 2-Sat algoritmo. Per questo uso l'algoritmo di Tarjan sopra menzionato.

Si noterà che alcuni degli algoritmi più elementari (come BFS, DFS, Dijkstra) non sono menzionati sopra e che è perché io non li ho implementato. Questi algoritmi non possono essere facilmente generalizzati in un modo che dovrai semplicemente copiare e incollare e tutto funzionerà. Inoltre mi ci vogliono meno di 5 minuti per scriverli - di solito metto nella mia libreria solo algoritmi che sono difficili da implementare o facili da fare quando li implementano.

Problemi correlati