Miglior linguaggio di programmazione per cicli for annidati

di Anonimizzato22271 il
9 risposte
Buonasera,
qual'è secondo voi il miglior linguaggio di programmazione da utilizzare per il problema indicato nel titolo (in termini di tempi ovviamente)? Si parla di circa 50 cicli for annidati, ho letto che ad esempio Matlab risulta lento per questo genere di operazioni.
Grazie.

9 Risposte

  • Assembler
  • La domanda non ha senso.
    Intanto,

    PERCHE' 50 cicli annidati?

    non serve rispondere!

    Ma, ovviamente, serve un RAGIONAMENTO per capire come mai ci sia la necessita' di annidare 50 cicli.
    Esiste SICURAMENTE una soluzione alternativa, ma per trovarla serve affrontare il problema da un'altro punto di vista.

    Il secondo punto e' che NON ESISTE IL MIGLIOR LINGUAGGIO DI PROGRAMMAZIONE:
    ogni linguaggio e' nato/e' stato progettato, per risolvere specifiche categorie di problemi usando specifici paradigmi di programmazione.

    Se e' vero che tutti i linguaggi hanno la STESSA espressivita' (TUTTI si possono usare per fare le STESSE cose), e' anche vero che alcuni sono piu' facili da usare di altri.

    ORA, anche SUPPONENDO che non ci sia modo di ovviare al problema dei 50 cicli annidati (MA ESISTE CERAMENTE), entra in gioco il problema su CHE COSA si cicla, e CHE COSA viene manipolato all'interno di ogni ciclo.

    Anche SUPPONENDO che il ciclo sia fatto un un indice numerico (in cui l'Assembler non ha nessunissimo problema), se, all'interno del ciclo, si manipolano strutture dati COMPLESSE, lavorare in assembler sarebbe un suicidio.

    Ma non solo: nel 99.999% dei casi, il tempo impiegato dal codice che implementa il ciclo, e' (NON dovrebbe essere, se uno ha fatto le cose per bene) assolutamente infinitesimo rispetto al tempo necessario ad eseguire il PASSO del ciclo.

    Infine, dopo tutta questa elucubrazione mentale, facciamo una stima:
    1) cicli di 2 elementi ogn'uno, per 50 livelli, vuol dire 2^50 passi = 1.13*10^15 passi. Sono UN MILIONE DI MILIARDI di passi.
    2) supponiamo un pc di fasci alta, con CPU a 4Ghz, ed un'op per ogni ciclo (4*10^9 operazioni/secondo). Servono circa 281500secodi, pari a 3 giorni e 6 ore di calcolo.
    SOLO PER CICLARE!

    Il che vuol dire, che per fare qualcosa di VAGAMENTE intelligente, si passa dai 6 giorni a MESI (semplicemente passando da UN CICLO di clock per operazione, a 4 CICLI di clock, si passa da UNA a QUATTRO settimane), oppure serve un bel po' di potenza di calcolo.
  • C, praticamente identico ad assembly (sotto questo profilo)
  • Proporrei un'alternativa ANCORA MIGLIORE

    carta e matita + cervello

  • Brute force? Ahi ahi ahi ...
  • migliorabile ha scritto:


    Ma, ovviamente, serve un RAGIONAMENTO per capire come mai ci sia la necessita' di annidare 50 cicli.
    Esiste SICURAMENTE una soluzione alternativa, ma per trovarla serve affrontare il problema da un'altro punto di vista.
    Già. Poi, magari, grattando viene fuori (come suggerisce implicitamente il nostro ottimo Oregon) che si tratta del solito banale problema combinatorio di generazione esaustiva, per il quale esistono geniali algoritmi loopless o CAT semplicemente inconcepibili per qualsiasi beginner e per una pletora di practitioners, ma che comunque richiedono qualche mese di elaborazione per determinate ampiezze... o libero accesso ad un cluster di Z13 e in ogni caso qualche giorno/settimana di pazienza.
  • 50 cicli annidati non li ho mai visti in 20 anni di programmazione, giusto per curiosità poer cosa ti servono?
  • Se la velocità d'esecuzione è così critica che si vedono le differenze tra un linguaggio e l'altro, cerca nei mercatini dell'usato un Cray X. Con un po' di Assembler il gioco è fatto...
  • Non ho letto tutte le risposte, ma... Oddio 50 cicli annidati? Sai le bolle di pipeline!!! Il signor Duff del loop unroll si metterebbe a piangere XD XD XD

    Scherzi a parte, se puoi, se posti il codice o le specifiche del codice magari ti si da una mano, comunque io programmo dal 1993 e non ho mai visto 50 cicli annidati. Sono davvero curioso di sapere a che servono, molto probabilmente si può trovare un modo di risolvere il problema senza tutti quei cicli
Devi accedere o registrarti per scrivere nel forum
9 risposte