全単射関数を反転させるアルゴリズム。


8

任意の全単射関数の逆関数を見つけるための一般化されたアルゴリズムはありますか?

  • このアルゴリズムが役立つためには、正しい答えが見つかると、最終的に停止する必要があります。
  • 最終的に解を見つけなければならないという要件を超えて、逆関数を見つけたり実行したりするのにかかる時間に制約はありません(そのことを念頭に置いて、ブルートフォースの推測とチェックよりも優れた方法がより興味深いでしょう)。

たとえば、そのような一般化されたアルゴリズムが存在する場合、それは可逆圧縮アルゴリズムの解凍アルゴリズムを解くことができます。

編集:

Evgenij Thorstensenの仮定が私の質問をかなり上手くまとめてくれたので、本当に気に入りました。

仮定

  • 固定アルファベットに対する計算可能な全単射関数(たとえば、{0、1})
  • それを計算する決定論的チューリングマシン(DTM)で表される
  • 提案されたアルゴリズムは、元の全単射関数の出力を反転させるDTMを解くことができます。

それを説明する別のショット:

指定:FドメインAのXをドメインBのYにマップする全単射関数。

提案されたアルゴリズムは、全単射関数を解くことができなければならないGように、ドメインAからX上のドメインBからYをマッピングG(F(X))=Xし、F * G = Iここで、I恒等関数です。


アルゴリズムへの入力はどのような形式ですか?
Lev Reyzin

入力の形式は、ソリューションの存在をどのように変えることができますか?
ケンダルホプキンス

1
一方向の置換が存在すると考えられています(RSAなど)。私はあなたが否定的な結果を探していると思いますか?
arnab 2010

2
余談ですが、反対票を投じる場合は、その理由を説明することをお勧めします
Suresh Venkat

2
この質問は具体的な答えを提供するのに十分に指定されていないため、私は反対票を投じました。あいまいすぎる。改善するには:アルゴリズムへの正確な入力は何ですか?アルゴリズムの正確な出力は何ですか?そうでなければ、私たちはあなたが何を意味するのかを推測しているだけです。
Aaron Sterling

回答:


7

全単射関数のアルゴリズムを逆関数のアルゴリズムに自動的に変換することに関する論文があります。私自身の最初の会議論文はそのようなものでした。しかし、他の回答がすでに示唆しているように、この方法で反転できるアルゴリズムのクラスは厳しく制限されています。


4

完全に構造化されていないドメインで実行できる最善の方法は、ブルートフォース検索であり、ドメインのサイズに比例して時間がかかります。ただし、対象のドメインがnビット文字列の場合、nは指数関数です。

(効率的な完全汎用関数インバーターがある場合、整数乗算関数を反転すると効率的な因数分解アルゴリズムが得られることに注意してください。)


効率的である必要はありません。与えられた全単射関数を反転するアルゴリズムのために、その関数の逆について何も言わない。たとえば、圧縮/解凍。
ケンダルホプキンス

また、単純にソリューションをブルートフォースにすると、停止の問題が発生する可能性があると思います。それぞれの試みは正しさ(実行)をチェックする必要があるためです。ブルートフォースの1つが無限ループを試みるとどうなりますか?ソリューションの実行に無限の時間がかかる場合はどうなりますか?
ケンダルホプキンス

ダブテイルを使用して、無限ループの問題を回避できます。en.wikipedia.org/wiki/Dovetailing_%28computer_science%29
アーロンスターリング

@Aaron無限ループの非常に興味深い解決策。正しい解決策を実行するのに無限の時間がかかる場合、それでも問題は解決しないと思います(そのような解決策の有用性には疑問があります)。
ケンドールホプキンス

1
整数の乗算は全単射ではないので、ここではメモが外れています。
Alexandru

3

@arnabがコメントで指摘したように、一方向の順列は暗号プリミティブです。任意の関数を効率的に反転させたい場合は、(因数分解に加えて)克服する暗号化の障壁があります。


異なるキー/データを使用すると同じデータになる可能性があるため、「一般化された」暗号化関数は全単射ではないと確信しています(可能性は低いですが、それでも可能です)。事前設定されたキーを使用して暗号化関数を指定した場合、一般化アルゴリズムは、秘密キーをブルートフォースする(パブリックをファクタリングする)アルゴリズムを解くだけでよく、ブルートフォース自体を行う必要はありません。
ケンダルホプキンス

RE「一般化されたアルゴリズムは、秘密鍵をブルートフォースする可能性があるアルゴリズムを解決する必要があるだけです」-私はあなたを理解しているとは思えません。さておき、ブルートフォースはどのようにキーを強制するのが効率的ですか?
Lev Reyzin

問題は、問題を解決するためのアルゴリズムを見つけるアルゴリズムを求めることだけであり、アルゴリズムを解決する必要はありません。また、inverting-solutionとinverting-finding-solutionには、時間制約があります。
ケンドールホプキンス

3

このページの多くの人がすでに一般的な解決策は扱いにくいかもしれないとすでに指摘しています。

可逆プログラミングに興味があれば、すべてが失われることはありません。与えられた関数の逆を見つける代わりに、可逆関数の合成から関数を作成することもできます。その場合、逆を見つけることは簡単です。

このアプローチの例(Haskellを使用)は、このペーパーで説明されてい ますhttp://www.cs.ru.nl/A.vanWeelden/bi-arrows/

たまたまそうなっているので、Biarrowを使用して圧縮アルゴリズムの1つの方向のみを記述し、もう1つの方向(解凍)を無料で取得できるようにしました(無料は間違った単語である可能性があります。言語サポートがないため、使いにくいです)。 。


2

これは、いくつかの強力な仮定の下でのハンドウェーブアルゴリズムです。

仮定

  • 固定アルファベットに対する計算可能な全単射関数(たとえば、{0、1})
  • それを計算する決定論的チューリングマシン(DTM)で表され、「その他」ではない(下記参照)
  • 入力DTMが全単射関数を計算しない場合、何が起きるかは気にしません

これらの仮定により、入力DTMを確認し、すべての遷移を反転させることができます(停止状態は開始状態になり、読み取りは書き込みになり、その逆も同様です。最後から読み取る、左が右など)。TMは決定論的であり、計算される関数は全単射であるため、結果もTMであり、逆を計算します。

乗算は全単射ではないため、これは因数分解には機能しません。素数の乗算、次数を無視するとですが、数値を乗算するTM 、必要な全単射関数を「のみ」計算しません。「多すぎ」を計算するため、2番目の仮定(はい、かなり強いです)です。これは表現についてのコメントとうまく結びついています。


あなたが与えた説明でDTMを単に「反転」させているかどうかはわかりません。これは通常の文法では機能しますが、DTMでは機能しません。
ケンドールホプキンス

これはさらに、入力のサイズにおいて線形でなければなりません。ああ、これらの強力な仮定がいかに役立つか。DTMでは機能しないのはなぜですか?
Evgenij Thorstensen、2010

ターニングマシンは逆回転できません(これは私があなたが求めていると思うことです)。状態、シンボル、および位置にいるとき、そこに到達する原因となったイベントはわかりません(同じ位置/状態/シンボルに複数の方法で到達する可能性があるため)。
ケンダルホプキンス

任意のDTMはできませんが、私はそれが全単射関数を計算する(実際には表す)という仮定を使用しようとしました。ここに通じるすべてのパスから状態、シンボル、および位置にいる場合、現在読み取っているものを書くことができるのは1つだけです(逆について話しているため)。それ以外の場合は、全単射関数の表現ではありません。全単射性についての私の仮定は正確にユニークなパスがあるということだと思います。
Evgenij Thorstensen、2010

私はそれが間違っていると確信しています。ここに示す(事前設定されたpubキーを使用した)暗号化の例について考えてください。これは全単射関数ですが、暗号化アルゴリズムを逆に「歩く」ことはできません(要点)。これにより、全単射DTMに対して同じことを行うことはできないと結論付けられます。
ケンドールホプキンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.