Un problema con JAVA

nochipfritz
Salve,

io dovrei sviluppare un programma in java, che lavora su polinomi. Quindi la mia idea è quella di rappresentare i polinomi come una lista di coefficienti (dal termine di grado 0 a quello di grado massimo). Il fatto è che non so come fare in java.

Potrei utilizzare ArrayList, o qualcosa di simile, ma tutte queste strutture sembrano avere una dimensione massima. In particolare l'accesso agli elementi della lista avviene con un int. (Quindi presumo che la dimensione massima sia 65535). Io invece devo lavorare su grandi polinomi.

Insomma avrei bisogno di lavorare con polinomi che possono avere come grado un BigInteger. Come faccio? Esiste una struttura dati già implementata? Ho letto da qualche parte che in java non esistono puntatori....e allora mi chiedo : "come dovrei implementare questi polinomi notevolmente grandi?"

Risposte
TomSawyer1
Io non conosco il Java, ma puoi usare matrici n-dimensionali. Ad esempio, se hai bisogno di un poliniomio di grado 70000, allora dichiari arr[2][65535] (sempre se e' il massimo). In questo modo puoi avere polinomi di grado $65355^n$, con n il numero di dimensioni della matrice.

nochipfritz
Crook, intanto ti ringrazio ....per i suggerimenti che mi hai dato, in tanti post.

Hai perfettamente ragione, sul fatto che potrei agirare il problema estendendo i vettori con delle matrici.
Il fatto è 1 altro. Vedi....un BigInteger è un intero a precisione illimitata. Quindi potrei avere anche a che fare con numeri giganteschi. A quel punto non saprei come allocare dinamicamente la matrice.

Quando si costruisce una matrice, in genere si conoscono, a priori, le dimensioni. Infatti, quando non si ha certezza sulla dimensione di una struttura dati statica , è preferibile usare una struttura dinamica.
Adesso:
1) java non usa puntatori
2) le strutture dinamiche...sono pseudodinamiche...infatti l'accesso può avvenire mediante indice, e hanno una dimensione prefissata (sembrano + strutture statiche adattate)
3) e inoltre, supponendo di usare 1 altro linguaggio (Il magnifico, supremo C) potrei incorrere a problemi di allocazione dinamica nello HEAP (il quale potrebbe anche non bastarmi, col rischio di generare un exploit della memoria riservata al mio processo).


Ho infatti notato...che in giro, non ci sono librerie polinomiali che supportano gradi di polinomi superiori ad un int....ci sarà 1 motivo no?

Caspita...il problema è serio!

elgiovo
Credo che con C++ non dovresti incorrere in problemi di sovraccarico dello stack, sempre se usi l'allocazione dinamica (puntatori e/o referenze). Dopotutto è un pò la fusione tra il C (allocazione dinamica) e il Java (programmazione a oggetti).

TomSawyer1
Se il Java ha quelle limitazioni, prova a usazre C++, perché, come ha detto elgiovo, non credo rischi di sovraccaricare lo stack. E comunque, vale la pena provare ad allocare dinamicamente le matrici sullo heap, sempre usando C++.

Per curiosità, dimmi circa quanto grande vuoi che sia il grado.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.