Jeśli lista jest posortowana, można rozważyć wszystkie podzbiory dla rozmiaru 1, a następnie 2, a następnie 3, do N. Algorytm jest początkowo nieco nieefektywny, ale zoptymalizowana wersja znajduje się poniżej. Oto pseudokod.
let A = {1, 2, 3}
let total_sum = 0
for set_size <- 1 to N
total_sum += sum(A[1:N-(set_size-1)])
Najpierw wyznacza się jeden z elementów: {{1}, {2}, {3}}: suma wszystkich elementów.
Następnie, zestawy dwóch elementów {{1, 2}, {2, 3}}: sumują każdy element, ale ostatni.
Następnie zestawy trzech elementów {{1, 2, 3}}: sumują każdy element oprócz dwóch ostatnich.
Ale ten algorytm jest nieefektywny. Aby zoptymalizować do O (n), pomnóż każdy element ith przez N-i i sumę (indeksowanie od zera tutaj). Intuicja jest to, że pierwszy element jest minimalna zestawów N, drugi element jest minimalna N-1 zbiorów itp
wiem, że to nie jest kwestia Python, ale czasami kod pomaga:
A = [1, 2, 3]
# This is [3, 2, 1]
scale = range(len(A), 0, -1)
# Take the element-wise product of the vectors, and sum
sum(a*b for (a,b) in zip(A, scale))
# Or just use the dot product
np.dot(A, scale)
Podany zestaw A ma numery posortowane lub nie mają zamówień? – Bhaskar
@ L16H7 Ich nie ma takiej kolejności – user3840069
Czy numery mogą się powtarzać? – Bhaskar