所与及び、
私の質問は:
与えられ
- 我々は決定することができると仮定すると、における、決定するどのような方法がある乗算(または分割)、プリフォームすることなくおよび。または、方法がないという何らかの証拠があります。
- 分母を乗算するよりも有理数を比較するための高速な方法はありますか。
所与及び、
私の質問は:
与えられ
回答:
私の現在の研究:
合理的な比較を解決するためのいくつかの一般的なルールを作成しようとすることができます:
すべての正の想定:
別のルール:
分母が大きいほど数値は小さくなり、分子が大きいほど数値は大きくなるため、このルールは論理的であると考えています。左側が大きい分母有する場合したがって及び小さな分子を、左が小さくなります。
ここでは上から、我々はそれを前提とします< C ∧ B < dはそうでない場合、我々はどちらか上記のルールでそれを解決する、またはに質問を逆にすることができますので、C、とにかくこの状態になります。
ルール:
このルールを使用すると、同等の問題について、右の分子と分母から左の分子と分母を減算できます。
そしてもちろん、スケーリングがあります:
これらのルールを使用すると、物事をいじったり、スマートな組み合わせで繰り返し適用したりできますが、数字が近く、病的である場合があります。
:前の規則を適用することにより、あなたはにすべてのこれらの問題を軽減することができ 、A
これを今すぐ直接解決できる場合もあれば、そうでない場合もあります。病理学的症例は通常、次の形式です。
それから、あなたはそれをひっくり返して、同じことをもたらします、ほんの少しだけ。ルール+フリップを適用するたびに、数字/ビットが削減されます。AFAICT、病理学的なケースでルールを回(各桁/ビットに1回)適用し、その見かけ上の利点を否定しない限り、すぐに解決することはできません。
この問題は、現在の未解決の問題よりも難しいように思えます。
さらに弱い問題は、以下を判別することです。
そしてさらに弱い:
これは、乗算を検証する際の未解決の問題です。dを決定方法があれば、それはより弱いです。< b cの場合、簡単にa dを決定できますか?= b c、アルゴリズムを2回使用してテストすることにより、a d ?< b c、b c ?< a d。どちらかが真の場合、a d ≠ b cであることがわかります。
さて、D ?= cは、少なくとも1986年には未解決の問題でした。
乗算と除算の複雑さ。非常に単純な方程式ax = bから始めましょう。整数を考慮した場合、その可解性のテストと解xの検出は、剰余ゼロの整数除算によって可能です。与えられた解xをチェックするには整数の乗算で十分ですが、検証のより速い方法があるかどうかは興味深い未解決の問題です。
非常に興味深いことに、彼は行列乗算を検証する問題にも言及しました。
また、行列乗算の検証、つまり、与えられたCに対してAB = Gであるかどうかの確認が、おそらくより高速に実行できるかどうかは興味深い質問です。
これは解決されており、ランダム化アルゴリズムを使用して時間で検証することが実際に可能です(入力行列のサイズはn × nなので、基本的には入力のサイズは線形時間です) )。特にその後の行列乗算アルゴリズムに対する唐津整数乗算の類似性を考えると、整数乗算を行列乗算に減らすことは可能でしょうか。次に、おそらく何らかの方法で、整数乗算に行列乗算検証アルゴリズムを活用できます。
とにかく、これはまだ私の知る限り、未解決の問題でありより強力な問題ですか?< c dは確実に開いています。平等検証の問題を解決することが、比較不平等の検証の問題に何らかの関係があるのかどうか、私は興味があります。
私たちの問題のわずかな変化は、分数が最低項に減少することが保証される場合です。この場合は。これは、分数の減少の比較検証に関係がありますか?
さらに微妙な質問、dをテスト方法があったらどうでしょうか?< c、これはdのテストにまで拡張されますか?= c?私は、我々が行ったようにあなたは、この「両方の方法」を使用することができますどのように表示されていないD ?< c d。
関連:
彼らは、おおよその乗算とランダム化検証についていくつかの作業を行いますが、これは完全には理解できません。
O(n log(n)log(log(n)))複雑さのようなものでnビット数を乗算するためのよく知られたアルゴリズムがあります。また、少なくとも入力全体を確認する必要があるため、O(n)よりも良いことはできません。私の質問は、「非決定的」アルゴリズムの適切なクラスのO(n)に実際に到達できるかどうかです。
より正確には、2つのnビット2進数「a」と「b」および2nビット数「c」を受け入れ、「a * b = c」かどうかをO(n)時間で通知できるアルゴリズムがありますか?そうでない場合、アルゴリズムがそれを使用して線形時間で製品をテストできるように、証明書C(a、b、c)の他の形式がありますか?線形時間でない場合、製品のテストの問題は、計算よりも少なくとも漸近的に簡単ですか?これらの方針に沿った既知の結果は歓迎されます。
ジョン。
―johnh4717
これは、非常に部分的な反証の試みです。事前に決められた wrtの定数と同様に、ディサイダーで(一定の数の)加算と減算だけを使用できると仮定します。言い換えると、ディサイザーでm o d 2、m o d 3などの定数を実行できます。計算できる量は、q = k 1 a + k 2 b + k 3 c + k 4 d = ∑ kの形式のみです。ここで、 kは事前定義された定数です。qは時間 O (∑ | a |)で計算できることに注意してください。
編集 この決定者は、ビットを決定することを意図しています:B = 1 iff a d > b c。服用検討、B 、C 、Dの内点としてR 4。ビットBは、4次元の双曲面である表面a d = b cの位置によって決まります。点(a 、b 、c 、d )がある場合入力空間では、上記の決定者は、この入力ポイントの境界距離内のポイント、つまりこれらのポイントを計算できます。q − a | = K 1、等これは、4次元空間内の直方体を定義します。
(これをより正確にする方法は?)直方体から表面までの距離は一般に制限されていないため、決定者が表面を計算することはできません。
良い質問。自信のレベルを受け入れますか?
おそらくおおよその除算を行います。すなわち
a / bの境界近似商を計算するには、ceil(log_2(b))およびfloor(log_2(b))でaを右にシフトします。次に、正確な商がこれら2つの値の間にあることがわかります。
次に、4つの整数の相対的なサイズに応じて、特定のケースを除外し、100%の信頼を得ることができます。
2以外の基数について手順を繰り返すことができます。このような操作を連続して行うと、符号/タイブレークの変化が何らかの形で観察されるまで、信頼度が上がりますか?
これがメソッドの最初のドラフトスケッチです。
[高価な]乗算を実行せずにad <cbを決定する方法はありますか
承知しました。
アイデア:ビットごとに10進展開を比較します。
唯一の厄介な点は、最初に平等を除外する必要があることです。そうしないと、終了しない可能性があります。
最初に整数部分を比較すると便利です。
このことを考慮:
def less( (a,b), (c,d) ) = {
// Compare integer parts first
intA = a div b
intC = c div d
if intA < intB
return True
else if intA > intB
return False
else // intA == intB
// Normalize to a number in [0,1]
a = a mod b
c = c mod d
// Check for equality by reducing both
// fractions to lowest terms
(a,b) = lowestTerms(a,b)
(c,d) = lowestTerms(c,d)
if a == c and b == d
return False
else
do
// Compute next digits in decimal fraction
a = 10 * a
c = 10 * c
intA = a div b
intC = c div d
// Remove integer part again
a = a mod b
c = c mod d
while intA == intC
return intA < intC
end
end
}
do-while
番号が等しくないため、ループを終了する必要があることに注意してください。ただし、実行時間はわかりません。数値が非常に近い場合、しばらく時間がかかる可能性があります。
これは速いですか?おそらくない。gdc
計算する整数除算、モジュロ、およびs がたくさんあり、反復回数が比較する数値間の距離に反比例するループがあります。
ヘルパーメソッド:
def lowestTerms(a,b) = {
d = gcd(a,b)
if d == 1
return (a,b)
else
return lowestTerms(a div d, b div d)
end
}