я наткнулся на этой проблеме: Учитывая массив чисел обр и ряд S, 4 различных чисел в обрах этой суммы до S.Quad время сочетания сложности
где решение:
function findArrayQuadCombination(arr, S):
if (arr == null OR S == null):
return null
n = length(arr)
if (n < 4):
return null
# hashing implementation language dependent:
pairHash = new HashTable()
for i from 0 to n-1
for j from i+1 to n-1
if !pairHash.isMapped(arr[i]+arr[j]):
pairHash.map(arr[i]+arr[j], [])
pairHash.get(arr[i]+arr[j]).push([i, j])
for pairSum in pairHash.getKeys()
if pairHash.isMapped(S - pairSum):
pairsA = pairHash.get(pairSum)
pairsB = pairHash.get(S - pairsSum)
combination = find4Uniques(pairsA, pairsB)
if (combination != null):
return combination
return null
# Helper function.
# Gets 2 arrays of sub-arrays of 2 numbers
# Gets 4 unique numbers, from 2 sub-arrays of different arrays
function find4Uniques(A, B):
lenA = length(A)
lenB = length(B)
for i from 0 to lenA-1:
for j from 0 to lenB-1:
if (A[i][0] == B[j][0] OR A[i][1] == B[j][1] OR
A[i][0] == B[j][1] OR A[i][1] == B[j][0]):
continue
else:
return [A[i][0], A[i][1], B[j][0], B[j][1]]
return null
Решение говорит, что это O (n^2), но я не согласен.
Леной и lenB в find4Uniques может быть не более п^2 в длину так, find4Uniques представляет собой О (п^4) «За pairSum в pairHash.getKeys()» линии О (п^2), потому что может быть n^2 разных ключей. Значит, не все должно быть O (n^6)?
Не отправляйте код как изображение, пожалуйста. – trincot
К сожалению, я исправил это. – Jessica
Связанная интересная проблема: найдите ВСЕ комбинации из 4 записей, которые равны данной сумме. – javadba