L'entrée est un tableau qui a au plus un élément qui apparaît au moins 60 % du temps. Le but est de trouver si ce tableau a un tel élément et si oui, trouver cet élément. J'ai trouvé une fonction "diviser pour régner" qui trouve un tel élément.
from collections import Counter
def CommonElement(a):
c = Counter(a)
return c.most_common(1) #Returns the element and it's frequency
def func(array):
if len(array) == 1:
return array[0]
mid = len(array)//2
left_element = func(array[:mid])
right_element = func(array[mid:])
if left_element == right_element:
return right_element
most_common_element = CommonElement(array)
element_count = most_common_element[0][1] #Getting the frequency of the element
percent = element_count/len(array)
if percent >= .6:
return most_common_element[0][0] #Returning the value of the element
else:
return None
array = [10,9,10,10,5,10,10,10,12,42,10,10,44,10,23,10] #Correctly Returns 10
array = [10,9,10,8,5,10,10,10,12,42,10,12,44,10,23,5] #Correctly Returns None
result = func(array)
print(result)
Cette fonction fonctionne mais elle est en O(n log(n)). Je veux implémenter un algorithme qui soit en O(n)
La fonction de récursion de mon algorithme est T(n) = 2T(n/2) + O(n). Je pense que le but est d'éliminer le besoin de trouver la fréquence, ce qui prend O(n). Des idées ?