Re: punti a coordinate intere nell'intersezione fra due iper-solidi
[Johannes Wentu:]
>In pratica sono interessato a tutte le intersezioni possibili fra i due
>ipersolidi perch� devo sapere tutti i modi possibili di disporre N
>oggetti in M urne ma con N che va da 1 a M.
Temo che il fatto che le urne siano limitate renda
improbabile l'esistenza di una formula matematica tanto
semplice (senza if, insomma) che ne tenga conto.
Il massimo che sono riuscito a ottenere e` il programmino
quick'n'dirty che allego in fondo. Tiene conto dei limiti e
la complessita` computazionale e` cubica (per l'esattezza
credo vada circa con MN^2). Comunque, in un colpo solo
calcola il numero di disposizioni per tutti gli N fino al
massimo dato. Spero che sia corretto; ho verificato i
risultati, per numeri piccoli, confrontandoli con una
versione che faceva i calcoli in modo piu' pedissequo,
contando una ad una le combinazioni possibili.
Spero che tu conosca il C...
>PS: qualcuno mi ha parlato dei numeri di seconda specie di Stirling...
>ma non mi sembrano ancora la soluzione definitiva.
Non so cosa siano. Non so molto di matematica.
Ciao
Paolo Russo
#define MAX_BOX 100 /* actually max+1 */
#define MAX_K 100 /* actually max+1 */
unsigned long Max[MAX_BOX];
unsigned long maxk;
unsigned long number;
unsigned long a[MAX_K],b[MAX_K];
MakeComb()
{
register unsigned long s;
register int j,m,k;
int i;
for (j=0; j<=maxk; j++) a[j]=0;
a[0]=1;
for (i=0; i<number; i++) {
for (j=0; j<=maxk; j++) {
m=Max[i];
if (m>j) m=j;
for (s=0,k=0; k<=m; k++) s+=a[j-k];
b[j]=s;
}
for (j=0; j<=maxk; j++) a[j]=b[j];
}
}
main(argc,argv)
int argc;
char **argv;
{
register unsigned long i;
if (argc<3) {
printf("Syntax: COMB maxK {max1 max2 ... maxN}\n");
printf("(K objects in N boxes)\n");
return 0;
}
maxk=atoi(argv[1]);
number=argc-2;
for (i=0; i<number; i++) Max[i]=atoi(argv[i+2]);
MakeComb();
for (i=0; i<=maxk; i++) printf("k=%lu: comb=%lu\n",i,a[i]);
}
Received on Fri Mar 01 2002 - 00:17:18 CET
This archive was generated by hypermail 2.3.0
: Sat Jan 04 2025 - 04:23:43 CET