İpucu: Genel basit bir çokgen, yalnızca x- koordinatı komşularından daha küçük olan tam bir tepe noktasına sahipse eksenine göre monotondur . Bu gözlem , en azından çokgeninizin kenarı dikey değilse, hemen bir O ( n ) -zamanı algoritması önerir .xxO ( n )
Spoiler selam:
İzoton (X [0..n-1], Y [0..n-1])
local_mins ← 0
için i ← 0 ila n-1
eğer (X [i] <X [i + 1 mod n]) ve (X [i] <X [i-1 mod n])
local_mins ← local_mins + 1
dönüş (local_mins = 1)
Çokgeninizin dikey kenarları olabileceğinden endişe ediyorsanız, X[i] < X[j]
bağları tutarlı bir şekilde koparmak için karşılaştırma yerine aşağıdaki alt yordamı kullanın :
IsLess(X, i, j):
return ((X[i] < X[j]) or (X[i] = X[j] and i < j))
Son olarak, formunun başka bir çizgi , bir x + b y = C , ve değişiklikler , aşağıdaki gibi:La x + b y= cIsLess
IsLess(X, Y, i, j):
Di ← a·X[i] + b·Y[i]
Dj ← a·X[j] + b·Y[j]
return ((Dj < Dj) or (Di = Dj and i < j))