32文字の英数字の文字列の可能なすべての組み合わせを生成することは可能ですか?もしそうなら、今日の高速なコンピュータでどれくらい時間がかかりますか?
私の大学の講師は、それは不可能だと言って、「不可能はない」と思いました。
どのくらいの時間がかかり、どのように行われるかについてのアイデアはありますか?現在、Java=を使用しています。彼の間違いを証明できると思います。
かなりばかげた値をとっても、それは数学に要約されます。
1サイクルで32文字の組み合わせを1つ生成できる命令があるとします。また、これらの組み合わせを保存しないので、実質的にメモリアクセスはありません。最後に、これらの命令の有効なクロック速度が2.0ペタヘルツ(毎秒10から15サイクル)であると仮定します。これは、地球上で最も高速なスーパーコンピューターの外側にはまだありません。
繰り返しのある英数字である32文字の組み合わせの数は、36の32乗です。したがって、10の32乗は、この値のはるかに小さい下限です。この小さいグループを計算するには、10〜17秒(組み合わせ/クロック速度)が必要です。年間で約3200万秒あるので、この例では、計算を簡単にするために3年間として1億秒かかります。
つまり、3年ごとに10秒から17秒を10秒から8秒で割ったものが残ります。つまり、この計算が完了するまでに30億年以上かかることになります。私たちの太陽が赤い巨人になる前に残した推定時間と比較して、それがちょうど50億年であることを確認してください...
最初の10000の組み合わせを生成して、Javaでかかる時間を測定することをお勧めします。
次に、おおよその概算として、サンプルサイズの組み合わせごとに必要な時間を計算し、その数に可能な組み合わせの総数を掛けます。 (多分、最初に計算をして、いくつの組み合わせがあるかを判断することです。それが本当の問題だからです)。
この種の質問は、[推定と桁の大きさで自分自身を行使するに非常に良い方法を示しています。すべての科学および技術分野で、これは大きな資産です。実際、私が雇う人たちに期待する一番のことは、ハードデータが利用できないときに知識に基づいた推測ができることです。
それでは、始めましょう:
すべての可能な文字列を生成する必要はありません-それはすでに存在しています。特定の文字列を検索する場合は、検索する必要はありません。それが存在します。保存したい場合は、すでに保存されています-保存に0バイト、フェッチに0時間かかります。
言い換えると、結果はすでに存在し、現実の構造にキャッシュされているため、結果を生成することが実際には最速の操作です。
これは、1つ1つが一意であることを前提として、1から1000までのすべての整数をソートするソートアルゴリズムを作成するように誰かに依頼するようなものです。並べ替える必要はまったくありません。
もちろん可能です。それとも、講師は32文字の文字列では表現できない文字/数字の組み合わせがあることを示唆していますか?
です実現可能 ...今ではまったく別の質問です。インターネット上のほとんどのマシンを利用できたとしたら、おそらく最終結果が適切であるほど短い期間で実行できるでしょう。