Ben bir böl ve yönet algoritması üzerinde çalışıyorum (aslında, bir dizi giriş noktasına eğri uydurma yapan). 'Böl' kısmı için, her nokta için bir hata teriminin hesaplanması gerekiyor ve eğer hata belirli bir eşiği aşarsa, eğriyi o noktada bölmek ve girişin sol ve sağ bölümlerini ayrı ayrı işlemek istiyorum. Basit bir döngü hile yapar; ama şu anki bölümün ortasında başlamam ve dışarıdan çalışmak benim için avantajlı olurdu. (Netleştirmek gerekirse: hatası çok büyük olan bir noktayı bulursam, yinelemeli olarak sol ve sağ bölümler için ayrı eğriler ararım ve üretirim - eğer tüm noktalar eşiğin içindeyse, benim eğrime uyuyor ve dönüyorum). yakın başlayarak diğer bir deyişleAlgoritma, ortadan dışa doğru bir dizi üzerinden mi geçecek?
int steps = (endIndex+1-startIndex);
int i = (startIndex+endIndex)>>1;
int stepdir = 1;
for(int q=0; q<steps; q++, i+=stepdir*q, stepdir=-stepdir)
{
// test point i here and return early if error exceeds threshold
}
: Baş-çizilmemesi biraz sonra
, ben (noktalar bir dizi vardır ve mevcut bölümstartIndex
gelen kapsayıcı
endIndex
etmektir) bu geldi Orta, bir endeks ileri, iki geri, üç ileri, dört geri ... Çalışır, ve eminim ki bu verimli, ama bunu yapmak için daha temiz bir yol olmalı, özellikle, ben sona erdi güncelleme dilindeki ifadelerin sırayla değerlendirildiğinden emin olmak için Java dil özelliklerini kontrol etmek zorunda kalmadan (C/C++'da olduğu gibi bir sıra operatörü olmasa bile).
Herhangi bir fikir için minnetle teşekkür ederiz. Daha temiz bir yolu var mı?
bir özyinelemeli işlevinin bir parçası olarak bu döngüyü kullanıyor musunuz? Örneğin, her bölme için birbirini ayırın ve tekrarlı olarak arayın. –
Evet ... açıklığa kavuşturmak için soruyu düzenledik. Son sonuç, bazı kaynak noktalarında birleştirilmiş 'basit' eğriler ve aradakilere 'yeterince yakın'. –