View Full Version : [C/C++] Miglior linguaggio per imparare algoritmi e strutture dati?
FatalIllusion
08-02-2015, 15:52
Ciao a tutti, spero che la mia richiesta sia attinente alla sezione.. in caso contrario, chiedo scusa fin da ora. Il mio problema sta nel fatto che dovrei imparare, dato che studio ing. informatica, strutture dati e algoritmi di base in C, ma non son riuscito a trovare un libro chiaro e completo in merito, probabilmente perchè col tempo si preferisce affrontare l'argomento in altri linguaggi, come C++. Per questo motivo avevo pensato di imparare i costrutti principali del C++ e seguire un testo più completo e chiaro su questa materia in C++, per poi implementare i programmi in C. Secondo voi può trattarsi di una mossa saggia? C'è molto lavoro da fare? Aggiungo che avevo optato per lo studio in pseudocodice da "Introduzione agli algoritmi" di Cormen, ma il testo è fin troppo rigoroso dal punto di vista matematico e soprattutto non mi aiuta, ovviamente, a capire quando allocare e deallcare memoria ad esempio, dato che il codice non fa riferimento ad alcun reale codice di programmazione.
dStefano93
08-02-2015, 19:23
Ciao!
Secondo me, quando si tratta di imparare a utilizzare e trattare algoritmi e strutture dati, bisognerebbe utilizzare il linguaggio di programmazione con cui ci si trova meglio: i concetti sono fondamentalmente gli stessi: alla fine, si può sintetizzare tutto con dello pseudo codice.
Come libri, ti posso consigliare i libri di testo del corso di Progettazione e Analisi di Algoritmi che ho seguito lo scorso semestre (Ingegneria Informatica, come te):
Algoritmi di Sedgewick (http://www.amazon.it/s/ref=nb_sb_noss?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&url=search-alias%3Daps&field-keywords=algoritmi+sedgewick)
Introduzione agli algoritmi di Cormen (che già conosci, ma che ritengo comunque fatto bene)
Introduction to the Design and Analysis of Algorithms (http://www.aw-bc.com/info/levitin/)
In ogni caso, secondo me, l'importante è assimilare i concetti e non "attaccarsi" troppo ad un solo linguaggio di programmazione. Il bello della programmazione è che nella stragrande maggioranza di linguaggi che incontrerai tutto quello che hai imparato, di algoritmi et similia, sarà sempre valido e ti dovrai unicamente adattare alla sintassi e ad alcune pratiche del linguaggio particolare.
FatalIllusion
08-02-2015, 20:15
Ringrazio entrambi per le risponde, ma il mio problema consiste proprio nel fatto che non son riuscito a trovare una fonte che sia chiara e completa sulle implementazioni di algoritmi e strutture dati in C, e per questo contavo di passare al C++, anche per imparare un nuovo linguaggio. Il cormen è ottimo per le spiegazioni, ma la pecca sta nel fatto che devo adattare lo pseudocodice in più punti per far sì che funzioni in linguaggio C. Avevo inoltre acquistato il libro di sedgewick, che purtroppo si è rivelato, almeno nella versione italiana, confusionario, prolisso e così via. La domanda quindi sarebbe: conviene riprendere da 0 il cormen, e adattare ogni algoritmo al linguaggio C, o optare per un linguaggio per il quale esistono libri su algoritmi e strutture dati molto più completi e chiari(come quello di Goodrich e Tamassia)?
vendettaaaaa
08-02-2015, 20:51
Ringrazio entrambi per le risponde, ma il mio problema consiste proprio nel fatto che non son riuscito a trovare una fonte che sia chiara e completa sulle implementazioni di algoritmi e strutture dati in C, e per questo contavo di passare al C++, anche per imparare un nuovo linguaggio. Il cormen è ottimo per le spiegazioni, ma la pecca sta nel fatto che devo adattare lo pseudocodice in più punti per far sì che funzioni in linguaggio C. Avevo inoltre acquistato il libro di sedgewick, che purtroppo si è rivelato, almeno nella versione italiana, confusionario, prolisso e così via. La domanda quindi sarebbe: conviene riprendere da 0 il cormen, e adattare ogni algoritmo al linguaggio C, o optare per un linguaggio per il quale esistono libri su algoritmi e strutture dati molto più completi e chiari(come quello di Goodrich e Tamassia)?
Tra i due linguaggi usa C++. Ti offre strutture dati pronte per essere usate negli algoritmi: std::vector è un array, std::list una linked list, poi ci sono code, stack, mappe (alberi). E tutte queste strutture si occupano di allocare e deallocare la memoria senza che ci debba pensare tu.
Es: alcuni algoritmi di sorting implementati in C++ (http://pastebin.com/Ey4Sy7h5). A suo tempo avevo studiato proprio con il Cormen.
Se il suo obiettivo (e quello del corso che sta seguendo) è imparare algoritmi e strutture dati implementandoli in C, non ha senso farlo in C++, tantomeno usando strutture dati già pronte.
Per capire come farlo in C, lo devi fare in C, seguendo lo pseudocodice e possibilmente evitando di legarti a doppio filo con il paradigma ad oggetti che in questa fase potrebbe confonderti le idee.
Fermo restando che algoritmi e strutture dati vivono indipendentemente dal linguaggio e che poi in pratica si usano implementazioni già fatte (salvo casi rari).
FatalIllusion
08-02-2015, 21:10
Grazie a tutti!
ingframin
09-02-2015, 21:45
http://www.apress.com/9781484200568
Questo è un bel libro, io ho letto la prima edizione a pezzetti.
Spiega in modo molto chiaro e python si presta ottimamente allo scopo.
FatalIllusion
11-02-2015, 23:07
http://www.apress.com/9781484200568
Questo è un bel libro, io ho letto la prima edizione a pezzetti.
Spiega in modo molto chiaro e python si presta ottimamente allo scopo.
L'idea, infatti, è proprio quella di studiare tramite un altro linguaggio, o studiare nuovamente il C da qualche libro più completo, come il "C programming, a modern approach". L'anno scorso mi son limitato a studiare dal deitel, che purtroppo non è esattamente completo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.