분할 및 정복을 사용하여 O(log N)
시간의 배열에서 최대 요소를 찾고 싶습니다. planet-source-code에 작동 코드가 있습니다.C 코드의 파이썬 변환이 작동하지 않습니다.
def largest(arr,i,j):
global max1
global max2
if i == j:
max1 = arr[i]
else:
if i == j-1:
max1 = arr[i] if arr[i] > arr[j] else arr[j]
else:
mid = (i+j)/2
largest(arr,i,mid)
max2 = max1
largest(arr,mid+1,j)
if max2 > max1:
max1 = max2
을 내가 배열 [98,5,4,3,2,76,78,92]
를 사용하고
max1 = arr[0]
largest(arr,1,8)
나는 아웃 - 오브 - 바운드리스트 인덱스 오류가 점점 오전으로 코드를 호출 할 때 다음과 같이 파이썬으로 번역. 그러나 C 코드는 올바른 결과 98을 리턴합니다.
:
파이썬에 대한 올바른 번역은 튜플와 직접 여러 값 반환을 사용합니다. C 코드에는 3 If 문이 있습니다. – Jaxedin
들여 쓰기를 확인하십시오 – Junuxx
또한 해당 코드는 O (lg n) 시간에 최소 및 최대를 찾지 않습니다. 사실 그것은 불가능합니다. 최소한 선형 시간이 필요하며 간단한 선형 스캔이 더 빠를 것입니다. –