Discussione Linguaggi, algoritmi, strutture dati e competitive programming

kx0s

Utente Iron
24 Luglio 2024
2
1
0
4
Salve, secondo voi quali sono gli algoritmi migliori da imparare per sviluppare un software, una web app, sistemi complessi, metodi hacking etc, ma anche quali sono le strutture dati da conoscere.
Vi vorrei chiedere anche a chi ha avuto a che fare con codeforces, atcoder, olimpiadi informatiche e molti altri siti di programmazione competitiva, qual’è il miglior linguaggio da usare sopratutto per l’efficienza e anche qua, che algoritmi e strutture dati bisogna conoscere.
Grazie
 
Sono tutte domande senza correlazione l'una con l'altra in realtà e non esiste nemmeno una risposta univoca.

Cosa significa "quali sono gli algoritmi migliori per sviluppare software"? Sei tu a dover implementare qualcosa che risolve il problema in base al caso specifico. Ci possono essere metodologie che ti aiutano, magari nella progettazione e soprattutto nella scrittura del codice; per dire, i framework web di norma fanno uso di MVC. Ma puoi usare MVC anche per separare la logica dalla GUI in un'applicazione desktop.

Sistemi complessi, cosa nello specifico?
Metodi hacking, cosa sono?

Non esiste una risposta univoca.

Gli algoritmi che tornano utili sono normalmente quelli di ordinamento e di ricerca; se hai un insieme ordinato di dati, puoi usare la ricerca dicotomica per esempio.

Vi vorrei chiedere anche a chi ha avuto a che fare con codeforces, atcoder, olimpiadi informatiche e molti altri siti di programmazione competitiva, qual’è il miglior linguaggio da usare sopratutto per l’efficienza e anche qua, che algoritmi e strutture dati bisogna conoscere.

Ai tempi andava di moda Project Euler; ora come ora ne esistono appunto un sacco: HackerRank, Leetcode e altri. Non mi piacciono neanche un pò, molto meglio il modello Project Euler per quanto mi riguarda.

Il miglior linguaggio è quello che conosci bene, innanzitutto. :) Ma linguaggi come Python sono sicuramente più rapidi (mi riferisco alla scrittura) rispetto ad altri.

Per le strutture dati, è bene che hai familiarità con quelle principali e che sai come funzionano. Specie quelle semplici.
Per esempio, sai cos'è un array dinamico?
Uno stack invece? E le code?

Poi in generale sono cose che trovi sui libri dedicati: alberi, alberi binari, grafi, mappe.

La gran parte delle strutture dati che ti servono esistono in quasi tutti i linguaggi (C è un'eccezione); la necessità di realizzare qualcosa di proprio è... bassa direi, nella maggior parte dei casi almeno.
 
Ciao, allora per la domanda "quali sono gli algoritmi migliori per sviluppare software", intendo per migliorare il problem solving e la logica quali sono gli algoritmi conosciuti da sapere, tipo dijkastra, bfs, dfs, ordinamento, programmazione dinamica e molto altro; per metodi hacking, intendo tipo reverse engineering oppure avere una conoscenza per entrare nell'ssi (servizi segreti italiani) o avere una conoscenza tipo george hotz.

Mentre per linguaggio, project euler e strutture dati grazie.