Как оптимизировать этот алгоритм суммы XOR? ⇐ Python

Программы на Python
Anonymous
Как оптимизировать этот алгоритм суммы XOR?

Сообщение Anonymous »

Я пытаюсь решить эту проблему с хакерранком https://www.hackerrank.com/challenges/x ... ce/problem

Код: Выделить всё

from functools import reduce

def xor_sum(arr):
return reduce(lambda x,y: x^y, arr)

def xorSubsequence(arr):
freq = {}
max_c = float("-inf") # init val
min_n = float("inf") # init val

for slice_size in range(1, len(arr)+1):
for step in range(0, len(arr)+1-slice_size):
n = xor_sum(arr[i] for i in range(step,step+slice_size))

freq[n] = freq.get(n,0)+1
if freq[n] >= max_c and (n < min_n or freq[n]> max_c):
min_n = n
max_c = freq[n]

return  min_n, freq[min_n]
Но время истекает, так как это ~O(n^3).
Я чувствую, что это какой-то математический трюк, может кто-нибудь объяснить мне решение? Я пытался прочитать некоторые решения в обсуждении, но не совсем их понял.
Копия проблемы:

Рассмотрим массив A из n целых чисел (A=a0,a1,...,an-1). Мы берем
все последовательные подпоследовательности целых чисел из массива, которые удовлетворяют следующему:

{ai,ai+1,...,aj-1,aj}, где 0可i可j可n< /p>
Для каждой подпоследовательности мы применяем побитовую операцию XOR (⊕)
ко всем целым числам и записываем результирующее значение.
Данный массив A, найдите сумму XOR каждой подпоследовательности
A и определите частоту, с которой каждая встречается число.
Затем выведите число и соответствующую ему частоту
в виде двух значений, разделенных пробелами, в одной строке.
Формат вывода
Выведите два целых числа, разделенных пробелами, в одну строку.
Первое целое число должно быть числом, имеющим наибольшую частоту,
а второе целое число должно быть частотой этого числа
(т.е. , количество раз, которое оно появлялось).
Если существует несколько чисел с максимальной частотой,
выберите наименьшее.
Ограничения
• 1≤n≤105

• 1≤ai

Подробнее здесь: https://stackoverflow.com/questions/730 ... -algorithm

Вернуться в «Python»