Збир разлика подскупова
#працтицеЛинкДив { дисплаи: ноне !импортант; } За скуп С који се састоји од н бројева пронађите збир разлике између последњег и првог елемента сваког подскупа. Проналазимо први и последњи елемент сваког подскупа држећи их у истом редоследу како се појављују у улазном скупу С, тј. сумСетДифф(С) = ? (последња(а) - прва(а)) где збир прелази све подскупове с од С.
Напомена:
Елементи у подскупу треба да буду у истом редоследу као у скупу С. Примери:
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.
Препоручено: решите то на ' ПРАКСИ ' прво пре него што пређемо на решење.
Једноставно решење
јер овај проблем је пронаћи разлику између последњег и првог елемента за сваки подскуп с скупа С и исписати збир свих ових разлика. Временска сложеност за овај приступ је О(2
н
).
Ефикасно решење
да реши проблем у линеарној временској сложености. Дат нам је скуп С који се састоји од н бројева и потребно је да израчунамо збир разлике између последњег и првог елемента сваког подскупа С, тј. сумСетДифф(С) = ? (последња(а) - прва(а)) где збир прелази све подскупове с од С. Еквивалентно сумСетДифф(С) = ? (последња(а)) - ? (први(и)) Другим речима, можемо израчунати збир последњег елемента сваког подскупа и збир првог елемента сваког подскупа посебно, а затим израчунати њихову разлику. Рецимо да су елементи из С {а1 а2 а3... ан}. Обратите пажњу на следеће запажање:
Креирај квиз
- Подскупови који садрже елемент а1 као први елемент се може добити узимањем било ког подскупа {а2 а3... ан} и затим укључивањем а1 у њега. Број таквих подскупова биће 2 н-1 .
- Подскупови који садрже елемент а2 као први елемент могу се добити узимањем било ког подскупа од {а3 а4... ан} и затим укључивањем а2 у њега. Број таквих подскупова биће 2 н-2 .
- Подскупови који садрже елемент аи као први елемент могу се добити узимањем било ког подскупа од {аи а(и+1)... ан} и затим укључивањем аи у њега. Број таквих подскупова биће 2 н-и .
- Стога ће збир првог елемента свих подскупова бити: СумФ = а1.2
- н-1
- + а2.2
- н-2
- +...+ ан.1 На сличан начин можемо израчунати збир последњег елемента свих подскупова С (узимајући на сваком кораку аи као последњи елемент уместо првог елемента и затим добијајући све подскупове). Збир Л = а1.1 + а2.2 +...+ ан.2
- н-1
- Коначно ће одговор на наш проблем бити
- СумЛ - СумФ
- .
- Имплементација:
- 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 ( '%d n ' 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. ?>- Излаз:
21
- Временска сложеност: О(н) Овај чланак је допринео
- Акасх Аггарвал
- . Ако вам се свиђа ГеексфорГеекс и желите да допринесете, такође можете написати чланак користећи
- допринос.геексфоргеекс.орг
- или пошаљите свој чланак на допринос@геексфоргеекс.орг. Погледајте како се ваш чланак појављује на главној страници ГеексфорГеекс-а и помозите другим штреберима.