Я хочу разработать алгоритм, который определяет, является ли массив A множественным, и возвращает этот элемент.
Массив является множественным числом, если в массиве существует элемент x, если более половины массива совпадает с x.
Мне интересно, существует ли более эффективный алгоритм «разделяй и властвуй», который работает лучше, чем текущий, который у меня есть сейчас.
Assume you have the array
aaabbcac
я буду рекурсивно разбивать массив до тех пор, пока не получу подмассивы размером 2, как показано ниже.
aa ab bc ac
отсюда, я буду сравнивать каждый элемент в SUBARRAY, чтобы увидеть, равны ли они:
Если EQUAL, вернуть элемент,
В противном случае верните false.
aa ab bc ac
a f f f
так что теперь у меня есть массив элементов A и 3 ложных.
Я думал объединить их так:
a f f f
a f <----- combining a and f will give a
a <----- returns a
Но, если мы посмотрим на массив, у нас есть 4 A, что не соответствует критериям множественного массива. Он должен возвращать false, если массив не является множественным.
Я полагаю, что мой алгоритм будет работать в O (n lgn), если это будет правильный алгоритм, которого, к сожалению, нет.
Кто-нибудь может указать мне правильное направление для этого?