web-dev-qa-db-ja.com

32文字の英数字の文字列のすべての組み合わせを生成しますか?

32文字の英数字の文字列の可能なすべての組み合わせを生成することは可能ですか?もしそうなら、今日の高速なコンピュータでどれくらい時間がかかりますか?

私の大学の講師は、それは不可能だと言って、「不可能はない」と思いました。

どのくらいの時間がかかり、どのように行われるかについてのアイデアはありますか?現在、Java=を使用しています。彼の間違いを証明できると思います。

5
Jack Wilson

かなりばかげた値をとっても、それは数学に要約されます。

1サイクルで32文字の組み合わせを1つ生成できる命令があるとします。また、これらの組み合わせを保存しないので、実質的にメモリアクセスはありません。最後に、これらの命令の有効なクロック速度が2.0ペタヘルツ(毎秒10から15サイクル)であると仮定します。これは、地球上で最も高速なスーパーコンピューターの外側にはまだありません。

繰り返しのある英数字である32文字の組み合わせの数は、36の32乗です。したがって、10の32乗は、この値のはるかに小さい下限です。この小さいグループを計算するには、10〜17秒(組み合わせ/クロック速度)が必要です。年間で約3200万秒あるので、この例では、計算を簡単にするために3年間として1億秒かかります。

つまり、3年ごとに10秒から17秒を10秒から8秒で割ったものが残ります。つまり、この計算が完了するまでに30億年以上かかることになります。私たちの太陽が赤い巨人になる前に残した推定時間と比較して、それがちょうど50億年であることを確認してください...

11
Peter Smith

最初の10000の組み合わせを生成して、Javaでかかる時間を測定することをお勧めします。

次に、おおよその概算として、サンプルサイズの組み合わせごとに必要な時間を計算し、その数に可能な組み合わせの総数を掛けます。 (多分、最初に計算をして、いくつの組み合わせがあるかを判断することです。それが本当の問題だからです)。

5
jzd

この種の質問は、[推定と桁の大きさで自分自身を行使するに非常に良い方法を示しています。すべての科学および技術分野で、これは大きな資産です。実際、私が雇う人たちに期待する一番のことは、ハードデータが利用できないときに知識に基づいた推測ができることです。

それでは、始めましょう:

  • あなたは4 GHzのCPUを持っています。つまり、それは何かを実行します4 109 1秒あたりの回数。
  • さて、これはsomethingは単純な追加ではありません。プロセッサがサイクルごとに複数の操作を実行する可能性があるためです(たとえば、「ベクトル化」と考えてください)。そのため、非常に寛大になり(実行時間の下限が必要になると)、1つのサイクルで反復できる(つまり、別の順列を生成できる)と想定します。
  • 小文字/大文字の場合、英数字は62文字なので、6232 組み合わせ。もう一度、楽観的に見て、先生がすべて大文字について話していたとしましょう:3632 = 6.3 1049
  • これを4 10で割ります9、おおよそ1.5 1040 秒、つまり5 1032 年、それは…多すぎる
4
F'x

すべての可能な文字列を生成する必要はありません-それはすでに存在しています。特定の文字列を検索する場合は、検索する必要はありません。それが存在します。保存したい場合は、すでに保存されています-保存に0バイト、フェッチに0時間かかります。

言い換えると、結果はすでに存在し、現実の構造にキャッシュされているため、結果を生成することが実際には最速の操作です。

これは、1つ1つが一意であることを前提として、1から1000までのすべての整数をソートするソートアルゴリズムを作成するように誰かに依頼するようなものです。並べ替える必要はまったくありません。

3
Kevin Hsu

62英数字 があるとすると、可能な組み合わせの数は62 ^ 32 = 2.27e + 57になります。 ..としても知られています。

おもしろい事実:文字ごとに8ビットを使用してこれを保存すると、1792810956021776957992730108.0124 Geopbytes

Jzdが述べているように、一定量を生成するのにかかる時間をベンチマークしてみてください。これから、組み合わせごとの平均時間を計算し、これに可能な組み合わせの量を掛ければ、必要な時間が得られます。

2
Steven Jeuris

もちろん可能です。それとも、講師は32文字の文字列では表現できない文字/数字の組み合わせがあることを示唆していますか?

です実現可能 ...今ではまったく別の質問です。インターネット上のほとんどのマシンを利用できたとしたら、おそらく最終結果が適切であるほど短い期間で実行できるでしょう。

0
GrandmasterB