2011-11-04 5 views
0

私はおそらく、繰り返し有理数に限定された精度のユーザー入力を変換するためのファレイ分数近似を実装するつもりです。
http://mathworld.wolfram.com/FareySequence.html次数nのFareyシーケンスを決定する最も効率的な方法は何ですか?

私は簡単に順番に最も近いファレイ分数を見つけることができます、と私は再帰的シュテルン - Brocotツリーを構築することにより、メディアント画分を検索することで、Fnを見つけることができます。しかし
http://mathworld.wolfram.com/Stern-BrocotTree.html

、私はFnは非常に非効率的と思われる順に留分を見つけるために作ってみた方法:
(擬似)

For int i = 0 to fractions.count -2 
{ 
    if fractions[i].denominator + fractions[i+1].denominator < n 
    {  
     insert new fraction(
      numerator = fractions[i].numerator + fractions[i+1].numerator 
      ,denominator = fractions[i].denominator + fractions[i+1].denominator) 
      //note that fraction will reduce itself 
     addedAnElement = true 
    } 
} 
if addedAnElement 
    repeat 

私はほとんど常にシーケンスを定義しますFN N = M> 1

だから、おそらくそれが配列を一度構築し、それをキャッシュするのが最善かもしれない10^M ...しかし、それを導き出すためのより良い方法があるはずのように、それはまだいるようです。

EDIT:
本論文では、有望なアルゴリズムがあります。
http://www.math.harvard.edu/~corina/publications/farey.pdf

を私が実装しようとします。
トラブルは、彼らの「最も効率的」アルゴリズムは前に2つの要素を知っている必要があることです。私は、任意の配列の要素1が1である知っている/ Nが、2番目の要素がチャレンジだ...

EDIT2見つける:
私はこれを見落としかどうかはわかりません:F0 = 1/nで考える

X> 2の場合、
F1 = 1 /(N-1)

は従って全てのn> 2の場合は、最初の2つの画分を常に
1/N、1 /(N-1)であり、そして私はPatrascuからソリューションを実装できます。

はだから今、私たちはこの質問への答えは、このソリューションがあるかのベンチマークを使用して最適ではないことを証明する必要があります。..ファレイ配列中の

答えて

0

近隣画分をSECに説明されています。 Farey Subsequencesの隣接分数のうちの3つ、http://arxiv.org/abs/0801.1981

+0

決定隣人は、私が投稿論文で解決されます。この質問は、セット全体を決定する方法の効率に関するものです。集合を決定する数学は簡単ではなく、私はこの方法の効率に興味があります。しかし、良いリンクだ! – Matthew

1

なぜあなたはまったくファレイシリーズが必要なのでしょうか? continued fractionsを使用すると、系列をあらかじめ計算することなく、同じ近似をオンラインで得ることができます。

+0

この方法を使って有理近似の実装を教えてもらえますか? – Matthew

+0

まあ、私はそれの_implementation_を持っていません。しかし、簡単に次のように行うことができます:(1)あなたは、あなたの入力番号(説明は[こちら](http://en.wikipedia.org/wiki/Continued_fraction#Calculating_continued_fraction_representations)のための継続的な割合を算出し、合理的な入力のためのアルゴリズムであります有限)。 (2)あなたは連続分数を切り捨てます([ここ](http://en.wikipedia。org/wiki/Continued_fraction#Best_rational_approximations)はより詳細でアルゴリズムであり、すべての切り捨てが適切ではない)、それを有理数に展開します。 – Vlad

+0

または、ユーザーの入力を間隔として解釈し、[下のセクション](http://en.wikipedia.org/wiki/Continued_fraction#Best_rational_within_an_interval)の実装を確認してください。アルゴリズムは詳細が記述されています。 – Vlad

関連する問題