Я сравниваю сложность реализации алгоритма maxmin, и я реализовал это двумя способами: методом грубой силы и способом разделения и завоевания. После того, как я проверил оба два алгоритма для десяти входных элементов между 1000000. и 10000000. Следовать ниже алгоритмов:Почему реализация maxmin делит и побеждает медленнее, чем другие алгоритмы maxmin?
грубой реализации силы ниже:
def maxmin1(vetor):
max,min = vetor[0],vetor[0];
for elem in vetor[1:]:
if elem > max:
max = elem
if elem < min:
min = elem
return (min,max)
и разделяй и властвуй реализации ниже:
def maxmin4(vetor,inicio,fim):
if ((fim - inicio) == 1):
return (vetor[inicio], vetor[inicio])
elif ((fim - inicio) == 2):
if(vetor[inicio] < vetor[inicio+1]):
return (vetor[inicio], vetor[inicio+1])
else:
return (vetor[inicio+1], vetor[inicio])
else:
(min_left,max_left) = maxmin4(vetor,inicio,(fim-inicio)/2 + inicio)
(min_right,max_right) = maxmin4(vetor,(fim-inicio)/2 + inicio,fim)
if (max_left < max_right):
max = max_right
else:
max = max_left
if (min_left < min_right):
min = min_left
else:
min = min_right
return (min,max)
и результаты:
input N time algorithm 1 | time algorithm 2
1000000 | 0.1299650669 | 0.6347620487
2000000 | 0.266600132 | 1.3034451008
3000000 | 0.393116951 | 2.2436430454
4000000 | 0.5371210575 | 2.5098109245
5000000 | 0.6094739437 | 3.4496300221
6000000 | 0.8271648884 | 4.6163318157
7000000 | 1.0598180294 | 4.8950240612
8000000 | 1.053456068 | 5.1900761128
9000000 | 1.1843969822 | 5.6422820091
10000000| 1.361964941 | 6.9290060997
Я не underst и почему первый алгоритм был быстрее второго, так как первые имеют сложность 2 (n -1), а вторая имеют сложность 3n/2 -2, а теоретически первая медленнее второй. почему так происходит?
Что такое fim и inicio –
@ShivamShah: Походит на последний или порядок, и, во-первых, на какой-то романский язык. Может быть, португальский или румынский? – abarnert
fim - конец и inicio - начало. Это начало и конец массива. – aliel