Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    7

    [c# 4]Come creare liste dinamiche in c#

    Salve a tutti, sono un nuovo utente del forum. Vorrei chiedere un aiuto per un problema
    in c#.
    Per la necessità del mio programma devo creare una lista dinamica di dimensioni mooolto grandi -
    non dico quanto sennò mi cestinate, basti dire che l'indice deve essere un BigInteger -, ma non sono riuscito a trovare niente di simile ai vecchi puntatori a struct del c++. Qualcuno potrebbe gentilmente indicarmi quale classe usare e come.
    In alternativa, vista l'enormità della lista, ho pensato di usare un file, ma sono poco pratico del c#
    e ancora non so usare bene le classi per questi oggetti. Volendo limitare la ricerca tra manuali e forum, qualcuno mi potrebbe spiegare come faccio a scorrere il file con un fileReader e a ottenere direttamente l'ultimo elemento del file - nel file memorizo tipi di dato UInt 32.

    grazie dell'attenzione e della gentile risposta.

    Leonardo

  2. #2
    Se per lista intendi lista concatenata in C# esiste System.Collections.Generic.LinkedList<T> ( LinkedList ), che non dovrebbe avere limiti di dimensioni (appunto trattandosi di lista concatenata).
    E' molto banale da usare, (molto più che con C++), però per me non è la soluzione ideale al tuo problema. 2 miliardi di elementi è un numero elevato, e andare a cercare un elemento in mezzo a una lista concatenata di questo tipo risulta veramente sconveniente.
    Usare un file al posto della lista per ovviare il problema può esserti utile (mi sembra molto più comprensibile una tale mole di dati su disco che in memoria ram), però anche li dipende dall'uso che intendi fare, il disco è una periferica lenta, pensa a quanto ci impieghi a copiare una directory contente 2 giga di dati, lavorarci sopra è da suicidio.
    Il punto a cui voglio arrivare è che forse esistono altre vie più realistiche per ovviare il tuo problema, e sarebbe curioso se tu ci dicessi qual'è il tuo problema :-)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    7
    Ciao Samuele,
    grazie mille per la risposta.
    Il mio problema è che sto scrivendo un programma per calcolrare i numeri primi di Mersenne con la speranza di arrivare a numeri di un miliardo di cifre. Per questo ho bisogno di strutture dati di quella dimensione. Per far questo ho ideato un metodo di scomposizione che, per testare su numeri da centinaia di milioni o un miliardo di cifre, ha bisogno di quattro strutture dati da UInt32.MaxValue elementi. Per questi ho porvato ad usare array di byte, ma ho scoperto che anche l'heap ha un limite, (2 GB, ma non ho capito se totali o per ogni singola struttura dati). Sto allora passando a strutture del tipo BitArray, che riducono la dimensione di un ottavo e mi sono congeniali eprché io lavoro sulle rappresentazioni bianrie dei numeri. So che l'impresa è improba, ma volevo testare il mio metodo di scomposizione per valutarne la velocità.
    Invece, l'ultima struttura dati che mi serve è questa lista che supera di molto la dimensione di UInt32.MaxValue e quindi deve crescere indefinitamente (memoria permettendo). In questo caso forse usare un file mi è congeniale perché devo solo scorrere la lista un elemento per volta ad ogni ciclo, riposizionare Lo streamReader all'inizio del file e appendere un valore alla fine.
    In effetti io provengo da esperienze di programmazione strutturata e ancora non mi trovo a mio agio con le classi e sto imprando il C# su questo programma perché è l'unico linguaggio a me accessibile che permette di usare strutture dati di queste dimensioni. Ho trovato le LinkedList, ma ancora non ne ho capito il meccanismo in quanto non ho capito il ruolo dei LinkedListNode. Mi ci vorrrà un pò di pazienza. Capisco di non aver spiegato molto del mio programma e quindi chiederti un aiuto diventa difficile, ma se sai darmi qualche indicazione che potrebbe aiutarmi, te ne sarei molto grato, come ti sono grato della risposta che già mi hai dato.

    Cordiali saluti
    leonardo

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    7
    In effetti uso poco anche i forum e mi scuso con gli utenti di HTML.it e con i moderatori se ho aperto una discussione che forse non c'entra niente con i normali temi che vengono trattati.
    Se l'ho fatto è perché spesso ho navigato in questo forum trovandovi prezione risposte anche su temi che andavao oltre la programmazione Web e mi è venuto naturale postare qui la mia richiesta di aiuto.

    Leonardo

  5. #5
    numeri a un miliardo di cifre? il numero di atomi dell'universo, è 10^79 circa... un numero di 79 cifre per l'appunto. non riesco nemmeno lontanamente a immaginare un numero con qualche miliardo di cifre.
    Penso che per diventare famoso ti basti scomporre in tempo ragionevole un numero di 1024 bit, che mi pare sia la chiave di cifratura RSA. Ma penso che tu sappia già tutte queste cose.

    In ogni caso, non posso nascondere che la cosa mi interessa parecchio, dato che sono un appassionato di numeri primi, se ti va mi puoi contattare.

    samuele.tosatto@gmail.com

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    7
    Diventare famoso non mi interessa, è solo la curiosità di testare il metodo di scomposizione e poi mi allettava un certo premio di cui forse saprai. Grazie dell'interessamento, ti mando un email dove ti spiego meglio.

    Ciao. Leonardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.