13/07/2019, 15:15
13/07/2019, 20:35
ho poi dovuto escogitare una routine personale per il cambio degli indici
25/10/2019, 14:18
26/10/2019, 21:15
ZfreS ha scritto:sono: {0,1,2} {0,1,3} {0,1,4} {0,2,3} {0,2,4} {0,3,4} {1,2,3} {1,2,4} {1,3,4} {2,3,4}.
27/10/2019, 03:37
Super Squirrel ha scritto:Da quel che so non esiste una funzione next_combination() fornita dalla libreria standard del C++.
Ma i 7'' quali attività comprendono? In ogni caso il dato interessante sarebbe il tempo relativo alla sola generazione delle combinazioni.
#include <stdio.h>
#include <stdlib.h>
#define N 15
static void print_comb(const int *v, const int k)
{
int i;
printf("[%2d", v[0]);
for (i = 1; i < k; ++i) {
printf(", %2d", v[i]);
}
puts("]");
}
static void gen_comb(int *v, const int p, const int k)
{
int i;
if (p < k) {
if (0 == p) {
for (i = 1; i < N; ++i) {
v[p] = i;
gen_comb(v, p + 1, k);
}
}
else {
for (i = v[p - 1] + 1; i < N; ++i) {
v[p] = i;
gen_comb(v, p + 1, k);
}
}
}
else {
print_comb(v, k);
}
}
int main(void)
{
int i;
int v[N];
for (i = 1; i < N; ++i) {
gen_comb(v, 0, i);
}
return EXIT_SUCCESS;
}
27/10/2019, 09:31
27/10/2019, 15:54
Obidream ha scritto:Per curiosità ho provato una versione ricorsiva, di cui non sono neanche troppo sicuro, sul mio hardware modesto siamo ben sotto i 7 secondi d'esecuzione...
#include <stdio.h>
#define N 7
#define K 4
void print_comb(const unsigned int *v)
{
for(unsigned int i = 0; i < K; ++i)
{
printf("%2d ", v[i]);
}
printf("\n");
}
void gen_comb(unsigned int *v, const unsigned int p)
{
if(p < K)
{
unsigned int i = 1;
if(p)
{
i += v[p - 1];
}
for( ; i <= N; ++i)
{
v[p] = i;
gen_comb(v, p + 1);
}
}
else
{
print_comb(v);
}
}
int main()
{
unsigned int v[K];
gen_comb(v, 0);
return 0;
}
ZfreS ha scritto:Ok, osservando le combinazioni si nota che ogni elemento raggiunge un valore massimo, ma hai detto che i sono diversi modi di formalizzarlo, la mia domanda è: come ci si arriva? Quella formula è sempre valida?
ZfreS ha scritto:sono: {0,1,2} {0,1,3} {0,1,4} {0,2,3} {0,2,4} {0,3,4} {1,2,3} {1,2,4} {1,3,4} {2,3,4}.
27/10/2019, 16:29
26/06/2020, 16:13
for(unsigned int j = k - i; j < k; ++j)
{
u[j] = u[j - 1] + 1;
}
return true;
27/06/2020, 00:11
++u[k - i - 1];
Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000—
Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.
Powered by phpBB © phpBB Group - Privacy policy - Cookie privacy
phpBB Mobile / SEO by Artodia.