-
Dodiz.
User deleted
Esercizio
BINOMIO DI NEWTON
il binomio di newton è una formula che calcola la potenza ennesima di un binomio ( (a + b) ^ n) con la seguente formula:
Dove la "E" sta per sommatoria, ovvero viene eseguita quella operazione e il risultato viene sommato alla stessa formula ma con k += 1,
mentre è chiamata combinazione semplice ed è il coefficiente del binomio (lo stesso del triangolo di tartaglia), fa parte del calcolo combinatorio (Click) e viene calcolata secondo la formula dei 3 fattoriali:SPOILER (clicca per visualizzare)In matematica, si definisce fattoriale di un numero naturale n, indicato con n! il prodotto dei numeri interi positivi minori o uguali a tale numero. In formula:
Oppure con questa:
Aiuto: al numeratore ci sono tanti fattori quanti ne dice k
Buon lavoro ^^
Edited by Dodiz - 2/11/2013, 21:52. -
Guglielmoqwerty.
User deleted
Come esercizio sembra interessante ma... potresti esplicitarmi lo scopo? (Mi sono appena svegliato e non sono molto reattivo ) . -
Dodiz.
User deleted
Come esercizio sembra interessante ma... potresti esplicitarmi lo scopo? (Mi sono appena svegliato e non sono molto reattivo )
Ma buongiorno
Non so credo..metterti alla prova Gli altri che ho letto non sembrano averne uno. -
Guglielmoqwerty.
User deleted
Ho fatto la pennichella pomeridiana
Comunque non voglio la soluzione, mi piacerebbbe appunto sapere lo scopo, leggendo l'esercizio mi sembra semplicemente la spiegazione della formula. (però spiegata bene )
Credo che lo scopo sia questo:CITAZIONEil binomio di newton è una formula che calcola la potenza ennesima di un binomio ( (a + b) ^ n) con la seguente formula
ma non lo capisco
Potresti per favore farmi un esempio di input ouput scrivendomi cosa risulta inserendo un determinato dato? Dovrebbe bastare grazie
EDIT: ho controllato su wikipedia. Se non ho capito male questa funzione sviluppa semplicemente le potenze di binomio giusto? (senza sapere i valori di x e y). -
Dodiz.
User deleted
Ho fatto la pennichella pomeridiana
Comunque non voglio la soluzione, mi piacerebbbe appunto sapere lo scopo, leggendo l'esercizio mi sembra semplicemente la spiegazione della formula. (però spiegata bene )
Credo che lo scopo sia questo:CITAZIONEil binomio di newton è una formula che calcola la potenza ennesima di un binomio ( (a + b) ^ n) con la seguente formula
ma non lo capisco
Potresti per favore farmi un esempio di input ouput scrivendomi cosa risulta inserendo un determinato dato? Dovrebbe bastare grazie
EDIT: ho controllato su wikipedia. Se non ho capito male questa funzione sviluppa semplicemente le potenze di binomio giusto? (senza sapere i valori di x e y)
mi sono spiegato male? >_>
In input n, e se vuoi farlo più complesso i coefficienti di a e b, ed eventualmente anche la parte letterale dei singoli monomi (invece di a, metti bc o simili..)
a e b rimangono variabili..anzi parametri in questo caso. -
Guglielmoqwerty.
User deleted
No, la spiegazione della formala è ottima, non manca niente, forse hai solo dato per scontato che tutti conoscessero bene lo scopo della formula. (E grazie per aver specificato che servono anche i coefficienti, non ci avevo pensato)
Comunque adesso ho capito, appena ho tempo mi metto al lavoro. -
.
Ti segnalo un errore, non è chiamata "disposizione semplice" ma "combinazione semplice" o "coefficiente binomiale".
Colgo l'occasione per linkare un mio articolo: https://solopc.forumcommunity.net/?t=55434437 l'avevo postato su Syra per un Contest, ma non l'avevo postato anche qui.
Comunque appena ho un attimo di tempo lo scrivo.. -
Dodiz.
User deleted
modificato . -
Guglielmoqwerty.
User deleted
Ok, ho finalmente finito:
Supporta solo binomi della forma (x+y)^n con inserimento di n. In compenso ho accelerato il calcolo del fattoriale di un numero (a scapito di un po' di memoria) e documentato la classe. Forse l'unica scelta non-OO è quella di non creare una classe interna CoefficenteBinomiale ma di calcolarlo con un metodo.. -
.
Buona l'idea del calcolo del fattoriale in quel modo. Purtroppo in effetti va a scapito della memoria, in quanto se n valesse 100 occuperesti 400byte solo per l'array.
Ti conviene utilizzare StringBuilder al posto di String nel metodo risolvi(). Un meccanismo della Heap permette comunque a Java di utilizzare gli oggetti creati in precedenza, ma vedo molti assegnamenti e concatenazioni... quindi eviterei ed utilizzerei StringBuilder.
Osservando la OOP direi invece che sarebbe stato meglio utilizzare una classe con costruttore privato e metodo statico, chiamata ad esempio Fattoriale. Ma per un esercizio così, va bene anche in questo modo.
Visto il modo in cui hai "legato" l'array di fattoriali con la Combinazione non avrei creati classi interne. Magari una privata, ma non avrebbe avuto molto significato.. -
Guglielmoqwerty.
User deleted
CITAZIONE (RootkitNeo @ 4/11/2013, 02:04)Buona l'idea del calcolo del fattoriale in quel modo. Purtroppo in effetti va a scapito della memoria, in quanto se n valesse 100 occuperesti 400byte solo per l'array.
Ma comunque mi sembra che 400byte (o 3200bit ) contro al calcolare il fattoriale di 100 numeri è un buon guadagno.
Altrimenti, visto che i fattoriali vengono utilizzati in ordine, si potrebbe conservare solo l'ultimo prodotto e un indice. Così il tutto si ridurrebbe a 64 bit (o 8 byte)CITAZIONETi conviene utilizzare StringBuilder al posto di String nel metodo risolvi(). Un meccanismo della Heap permette comunque a Java di utilizzare gli oggetti creati in precedenza, ma vedo molti assegnamenti e concatenazioni... quindi eviterei ed utilizzerei StringBuilder.
Fatto, così va bene? (Il link è sempre lo stesso. W dropbox )CITAZIONEOsservando la OOP direi invece che sarebbe stato meglio utilizzare una classe con costruttore privato e metodo statico, chiamata ad esempio Fattoriale. Ma per un esercizio così, va bene anche in questo modo.
Visto il modo in cui hai "legato" l'array di fattoriali con la Combinazione non avrei creati classi interne. Magari una privata, ma non avrebbe avuto molto significato.
Oh, quindi il coefficiente binomiale ha altre applicazioni? Grazie per la delucidazione Comunque non credo che il metodo statico sia la scelta migliore (dal punto di vista delle prestazioni) perchè in questo caso dovrei calcolarmi manualmente il valore ogni volta. -
uomo in verde.
User deleted
Premessa: non sono un buon programmatore, per cui le mie considerazioni potrebbero essere decisamente turpi. Detto questo: non sarebbe meglio trovare un'alternativa all'utilizzo dei coefficienti binomiali, che risultano dispendiosi in termini di tempistiche di calcolo (volevo dire costo computazionale, ma credo direi una cazzata)? Una proprietà che agli appassionati di matematica fa sempre piacere ricordare è che i coefficienti dello sviluppo di Newton di un binomio di grado n corrispondono esattamente ed ordinatamente ai termini numerici dell'n-sima riga del Triangolo di Tartaglia, di cui non disquisisco qui in quanto la pagina di Wikipedia esiste e ne illustra le caratteristiche credo meglio di come farei io. Il mio pensiero è: non sarebbe più ottimale implementare un albero binario che generi una versione "troncata" del Triangolo di Tartaglia e poi pescare i coefficienti dalle foglie? Mi rimetto alle vostre risposte, sicuramente ne sapete più di me :-) . -
Guglielmoqwerty.
User deleted
CITAZIONE (uomo in verde @ 24/2/2014, 22:20)Premessa: non sono un buon programmatore, per cui le mie considerazioni potrebbero essere decisamente turpi. Detto questo: non sarebbe meglio trovare un'alternativa all'utilizzo dei coefficienti binomiali, che risultano dispendiosi in termini di tempistiche di calcolo (volevo dire costo computazionale, ma credo direi una cazzata)? Una proprietà che agli appassionati di matematica fa sempre piacere ricordare è che i coefficienti dello sviluppo di Newton di un binomio di grado n corrispondono esattamente ed ordinatamente ai termini numerici dell'n-sima riga del Triangolo di Tartaglia, di cui non disquisisco qui in quanto la pagina di Wikipedia esiste e ne illustra le caratteristiche credo meglio di come farei io. Il mio pensiero è: non sarebbe più ottimale implementare un albero binario che generi una versione "troncata" del Triangolo di Tartaglia e poi pescare i coefficienti dalle foglie? Mi rimetto alle vostre risposte, sicuramente ne sapete più di me :-)
Ovviamente esiste anche il triangolo di tartaglia (infatti non capivo lo scopo dell'esercizio perchè avevo presente quello XD ). Lo scopo dell'esercizio penso sia trovare un algoritmo non troppo esoso per calcolare il fattoriale, perchè usare
F(n) = n*F(n-1) con F(1)=1
sarebbe da pazzi. Comunque anche implementare il triangolo di tartaglia potrebbe essere un'idea
I termine dovrebbe (da notare il condizionale) essere giusto.
PS: Il mio file è stato spostato: Download Dropbox Aggiornato.