#practiceLinkDiv { display : aucun !important; }Étant donné un ensemble S composé de n nombres, trouvez la somme des différences entre le dernier et le premier élément de chaque sous-ensemble. Nous trouvons le premier et le dernier élément de chaque sous-ensemble en les gardant dans le même ordre qu'ils apparaissent dans l'ensemble d'entrée S. c'est-à-dire sumSetDiff(S) = ? (dernier(s) - premier(s)) où la somme couvre tous les sous-ensembles s de S.
Note:
comment ouvrir un fichier json
Les éléments du sous-ensemble doivent être dans le même ordre que dans l'ensemble S. Exemples :
S = {5 2 9 6} n = 4
Subsets are:
{5} last(s)-first(s) = 0.
{2} last(s)-first(s) = 0.
{9} last(s)-first(s) = 0.
{6} last(s)-first(s) = 0.
{52} last(s)-first(s) = -3.
{59} last(s)-first(s) = 4.
{56} last(s)-first(s) = 1.
{29} last(s)-first(s) = 7.
{26} last(s)-first(s) = 4.
{96} last(s)-first(s) = -3.
{529} last(s)-first(s) = 4.
{526} last(s)-first(s) = 1.
{596} last(s)-first(s) = 1.
{296} last(s)-first(s) = 4.
{5296} last(s)-first(s) = 1.
Output = -3+4+1+7+4-3+4+1+1+4+1
= 21.
Recommandé : veuillez le résoudre sur ' PRATIQUE ' avant de passer à la solution.
Une solution simple
car ce problème consiste à trouver la différence entre le dernier et le premier élément pour chaque sous-ensemble s de l'ensemble S et à générer la somme de toutes ces différences. La complexité temporelle de cette approche est O(2
topologie du réseau
n
).
Une solution efficace
pour résoudre le problème en complexité temporelle linéaire. On nous donne un ensemble S composé de n nombres et nous devons calculer la somme des différences entre le dernier et le premier élément de chaque sous-ensemble de S, c'est-à-dire sumSetDiff(S) = ? (last(s) - first(s)) où la somme couvre tous les sous-ensembles s de S. De manière équivalente, sumSetDiff(S) = ? (dernier(s)) - ? (premier(s)) En d’autres termes, nous pouvons calculer séparément la somme du dernier élément de chaque sous-ensemble et la somme du premier élément de chaque sous-ensemble, puis calculer leur différence. Disons que les éléments de S sont {a1 a2 a3... an}. Notez la remarque suivante :
c++ convertir un entier en chaîne
- Sous-ensembles contenant un élément a1 car le premier élément peut être obtenu en prenant n'importe quel sous-ensemble de {a2 a3... an} puis en y incluant a1. Le nombre de ces sous-ensembles sera de 2n-1.
- Les sous-ensembles contenant l'élément a2 comme premier élément peuvent être obtenus en prenant n'importe quel sous-ensemble de {a3 a4... an} puis en y incluant a2. Le nombre de ces sous-ensembles sera de 2n-2.
- Les sous-ensembles contenant l'élément ai comme premier élément peuvent être obtenus en prenant n'importe quel sous-ensemble de {ai a(i+1)... an} puis en y incluant ai. Le nombre de ces sous-ensembles sera de 2n-je.
-
- Par conséquent, la somme du premier élément de tous les sous-ensembles sera : SumF = a1.2
- n-1
- + a2.2
- n-2
- +...+ an.1 De la même manière, nous pouvons calculer la somme du dernier élément de tous les sous-ensembles de S (en prenant à chaque étape ai comme dernier élément au lieu du premier élément puis en obtenant tous les sous-ensembles). SommeL = a1.1 + a2.2 +...+ an.2
- n-1
- Finalement la réponse à notre problème sera
- SommeL - SommeF
- .
- Mise en œuvre:
- C++
Java// A C++ program to find sum of difference between // last and first element of each subset #include
// Returns the sum of first elements of all subsets int SumF(int S[] int n) { int sum = 0; // Compute the SumF as given in the above explanation for (int i = 0; i < n; i++) sum = sum + (S[i] * pow(2 n-i-1)); return sum; } // Returns the sum of last elements of all subsets int SumL(int S[] int n) { int sum = 0; // Compute the SumL as given in the above explanation for (int i = 0; i < n; i++) sum = sum + (S[i] * pow(2 i)); return sum; } // Returns the difference between sum of last elements of // each subset and the sum of first elements of each subset int sumSetDiff(int S[] int n) { return SumL(S n) - SumF(S n); } // Driver program to test above function int main() { int n = 4; int S[] = {5 2 9 6}; printf('%dn' sumSetDiff(S n)); return 0; } Python3// A Java program to find sum of difference // between last and first element of each // subset class GFG { // Returns the sum of first elements // of all subsets static int SumF(int S[] int n) { int sum = 0; // Compute the SumF as given in // the above explanation for (int i = 0; i < n; i++) sum = sum + (int)(S[i] * Math.pow(2 n - i - 1)); return sum; } // Returns the sum of last elements // of all subsets static int SumL(int S[] int n) { int sum = 0; // Compute the SumL as given in // the above explanation for (int i = 0; i < n; i++) sum = sum + (int)(S[i] * Math.pow(2 i)); return sum; } // Returns the difference between sum // of last elements of each subset and // the sum of first elements of each // subset static int sumSetDiff(int S[] int n) { return SumL(S n) - SumF(S n); } // Driver program public static void main(String arg[]) { int n = 4; int S[] = { 5 2 9 6 }; System.out.println(sumSetDiff(S n)); } } // This code is contributed by Anant Agarwal.
C## Python3 program to find sum of # difference between last and # first element of each subset # Returns the sum of first # elements of all subsets def SumF(S n): sum = 0 # Compute the SumF as given # in the above explanation for i in range(n): sum = sum + (S[i] * pow(2 n - i - 1)) return sum # Returns the sum of last # elements of all subsets def SumL(S n): sum = 0 # Compute the SumL as given # in the above explanation for i in range(n): sum = sum + (S[i] * pow(2 i)) return sum # Returns the difference between sum # of last elements of each subset and # the sum of first elements of each subset def sumSetDiff(S n): return SumL(S n) - SumF(S n) # Driver program n = 4 S = [5 2 9 6] print(sumSetDiff(S n)) # This code is contributed by Anant Agarwal.
JavaScript// A C# program to find sum of difference // between last and first element of each // subset using System; class GFG { // Returns the sum of first elements // of all subsets static int SumF(int []S int n) { int sum = 0; // Compute the SumF as given in // the above explanation for (int i = 0; i < n; i++) sum = sum + (int)(S[i] * Math.Pow(2 n - i - 1)); return sum; } // Returns the sum of last elements // of all subsets static int SumL(int []S int n) { int sum = 0; // Compute the SumL as given in // the above explanation for (int i = 0; i < n; i++) sum = sum + (int)(S[i] * Math.Pow(2 i)); return sum; } // Returns the difference between sum // of last elements of each subset and // the sum of first elements of each // subset static int sumSetDiff(int []S int n) { return SumL(S n) - SumF(S n); } // Driver program public static void Main() { int n = 4; int []S = { 5 2 9 6 }; Console.Write(sumSetDiff(S n)); } } // This code is contributed by nitin mittal.
PHP// Returns the sum of first elements of all subsets function sumF(S n) { let sum = 0; // Compute the SumF as given in the above explanation for (let i = 0; i < n; i++) { sum += S[i] * Math.pow(2 n - i - 1); } return sum; } // Returns the sum of last elements of all subsets function sumL(S n) { let sum = 0; // Compute the SumL as given in the above explanation for (let i = 0; i < n; i++) { sum += S[i] * Math.pow(2 i); } return sum; } // Returns the difference between sum of last elements of each subset and the sum of first elements of each subset function sumSetDiff(S n) { return sumL(S n) - sumF(S n); } // Driver program to test the above functions function main() { const n = 4; const S = [5 2 9 6]; console.log(sumSetDiff(S n)); } main();
// A PHP program to find sum // of difference between last // and first element of each subset // Returns the sum of first // elements of all subsets function SumF( $S $n) { $sum = 0; // Compute the SumF as given // in the above explanation for ($i = 0; $i < $n; $i++) $sum = $sum + ($S[$i] * pow(2 $n - $i - 1)); return $sum; } // Returns the sum of last // elements of all subsets function SumL( $S $n) { $sum = 0; // Compute the SumL as given // in the above explanation for($i = 0; $i < $n; $i++) $sum = $sum + ($S[$i] * pow(2 $i)); return $sum; } // Returns the difference between // sum of last elements of // each subset and the sum of // first elements of each subset function sumSetDiff( $S $n) { return SumL($S $n) - SumF($S $n); } // Driver Code $n = 4; $S = array(5 2 9 6); echo sumSetDiff($S $n); // This code is contributed by anuj_67. ?> - Sortir:
21
- Complexité temporelle : O(n) Cet article est rédigé par
- Akash Aggarwal
- . Si vous aimez GeeksforGeeks et souhaitez contribuer, vous pouvez également écrire un article en utilisant
- contribuer.geeksforgeeks.org
- ou envoyez votre article à [email protected]. Consultez votre article apparaissant sur la page principale de GeeksforGeeks et aidez les autres Geeks.