Design e complessità degli algoritmi - Come pensare in questo "modo"?


15

La mia domanda è generale: come posso iniziare a pensare in termini di progettazione e complessità dell'algoritmo? Ho intenzione di seguire un corso di laurea in Algorithm Design. Mi ero iscritto prima, ma l'avevo lasciato cadere perché non riuscivo a seguirlo. Devo seguire questo corso come requisito.

C'è un "trucco" per pensare in questo modo? So che questo lo sta dicendo piuttosto rozzamente, ma a volte una nuova prospettiva aiuta a pensare diversamente a un argomento.

Il problema principale che ho con questo corso (e corsi teorici simili) è: Come faccio a sapere che le soluzioni che trovo sono corrette? Trovo che la parte teorica sia arbitraria, specialmente quando 'dimostrando' che un certo algoritmo agisce o si comporta in un certo modo?

Il nostro corso utilizzerà il testo standard: Introduzione agli algoritmi di CLRS.

Ci sono libri di testo / siti / libri / ecc. che potrebbe offrire un modo per diventare fiducioso in questo campo?

Grazie a tutti,

Jason Dane


2
Suggerisco di dare un'occhiata a questo post . Consiglio in particolare il libro di Udi Manber.
MS Dousti,

1
Questa discussione su StackOverflow offre diversi suggerimenti: stackoverflow.com/questions/2256721/...
Jeffε

2
Secondo la raccomandazione di Manber. Scopri anche Come pensare agli algoritmi di Jeff Edmonds: amazon.com/Think-About-Algorithms-Jeff-Edmonds/dp/0521614104
Jeffε

"Come faccio a sapere che le soluzioni che mi vengono in mente sono corrette?" Vuoi dire che (1) hai escogitato un algoritmo ma non sai come dimostrare che è corretto, oppure (2) hai una prova ma non sei sicuro che sia corretto?
Jukka Suomela,

Primo passo: smetti di dare risposte dirette e fai invece riferimento alle soluzioni altrui. ;)
Raffaello

Risposte:


18

Penso che i corsi di progettazione di algoritmi e complessità computazionale siano sempre stimolanti per gli studenti che non hanno familiarità con queste materie perché richiedono un certo grado di maturità matematica e capacità di problem solving. Nel mio primo corso di laurea sulla "complessità computazionale", un mio amico che si era laureato in matematica pura mi ha detto quanto fosse sorpreso dal fatto che, sebbene quel corso non richiedesse un background molto matematico (almeno è quello che è stato detto in lo schema del corso), in realtà ha richiesto quasi tutte le abilità che ha ottenuto attraverso tutti i suoi puri corsi di laurea in matematica!

Ho scoperto che ho avuto modo di conoscere la "strada" di più (quando inizio il mio studio di laurea) leggendo e facendo esercizi dal libro di Sipser . Assicurati di fare gli esercizi perché l'abilità di problem solving e la maturità matematica è ciò che vuoi imparare e non solo un mucchio di fatti o definizioni.

Tuttavia, il libro di Sipser è buono solo per argomenti di complessità e completezza NP, non sarà sufficiente sostituire il libro CLRS. L'unico problema con il libro CLRS è che il suo vantaggio di una copertura completa potrebbe diventare la sua debolezza poiché il libro potrebbe sembrare abbastanza spaventoso o schiacciante per gli studenti. Quindi il mio consiglio è che dovresti davvero andare in biblioteca e cercare libri sugli algoritmi, scansionare uno per uno e scegliere quelli che si adattano maggiormente al tuo modello di pensiero. E ancora non dimenticare di fare esercizi!

Per gli algoritmi, suggerisco personalmente i seguenti libri (oltre a quelli suggeriti da Sadeq e JeffE):

  • Il bellissimo e leggibile libro Algorithms di S. Dasgupta, CH Papadimitriou e UV Vazirani.
  • The killer notes (o bozza del libro) di Jeff Erickson. (Dato che JeffE è troppo modesto per suggerire i suoi appunti, devo farlo da solo.)

In generale, ogni volta che studi un determinato algoritmo o struttura di dati, se in qualche modo l'esposizione nel tuo libro di testo non è abbastanza chiara per te, allora il modo migliore è cercare su google appunti di lezione su quel particolare argomento. In alcuni casi, diverse spiegazioni della stessa cosa alla fine ti danno il quadro completo. Almeno, è così che funziona per me.


8
+1 per le note assassine di Jeff. Mi piace sempre leggerli. La calligrafia araba della parola algoritmo è molto bella.
Mohammad Al-Turkistany,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.