J'ai écrit un code pour trouver la somme du produit de tous les sous-ensembles possibles du tableau. J'obtiens la sortie attendue mais je ne suis pas capable de la faire assez rapidement pour effacer les cas de test liés au temps.Somme du produit de tous les sous-ensembles possibles du tableau
Quelqu'un peut-il m'aider à optimiser mon code pour la vitesse?
La première entrée (testCases) est le nombre de cas de test. Selon le nombre de cas de test, nous aurons la taille de tableau (taille) et les éléments de tableau (ensemble).
Par exemple, une entrée valide serait:
1
3
2 3 5
où:
1
est le nombre de cas de test.3
est la taille de l'ensemble de test et2 3 5
sont les éléments de l'ensemble d'entrée.
Le résultat attendu est la suivante:
71
Le calcul de la sortie ci-dessus est la suivante:
{2}, {3}, {5}, {2, 3}, {3, 5}, {2, 5}, {2, 3, 5}
=> 2 3 5 6 15 10 30
=> 2 + 3 + 5 + 6 + 15 + 10 + 30
=> 71
import java.util.Scanner;
public class Test {
static int printSubsets(int set[]) {
int n = set.length;
int b = 0;
for (int i = 0; i < (1 << n); i++) {
int a = 1;
for (int j = 0; j < n; j++){
if ((i & (1 << j)) > 0) {
a *= set[j];
}}
b += a;
}
return b;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int testCases = scanner.nextInt();
for (int i = 0; i < testCases; i++) {
int size = scanner.nextInt();
int set[] = new int[size];
for (int j = 0; j < set.length; j++) {
set[j] = scanner.nextInt();
}
int c = printSubsets(set);
System.out.println((c - 1));
}
scanner.close();
}
}
Pourriez-vous clarifier votre problème? Si je vous comprends bien, votre algorithme devrait calculer '(2 * 3) + (2 * 5) + (2 * 3 * 5) + (3 * 5) = 61'. – Turing85
Les éléments individuels sont également des sous-ensembles valides. Vous devez ajouter '2 + 3 + 5' à' 61'. Donc, vous obtenez '71'. – anacron
Vous cherchez à optimiser votre code, je suppose? "assez rapide pour effacer les cas de test liés au temps." – 7663233