tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: 効率的なパンデジタル数作成方法が分かりません
投稿日: 2017/04/19(Wed) 09:55
投稿者魔界の仮面弁士
> ListBoxを使うと遅いと分かっていたので実際には配列を使っていました。

ReDim Preserve を使ってはいないですよね?


> 因みに18時間ぐらい廻していますが120万件ほど集まっていました。

その計算ペースですと、終了までには 2〜3 日かかりそうですね。
PC 性能にもよりますが、先の私の方法なら 15 秒前後だと思います。


>>> 下記の繰り返し処理をやってみたのですが、3桁の場合は良いのですが、

1,2,3 の 3 桁に対して、N1 = 0〜2、N2 = 0〜2、N3 = 0〜2 のループを行っていますよね。

これはすなわち、CH の個数を x としたときに、
『x^x 回』のループが行われるということを意味します。

x = 3 ならば「27 回」のループが行われることになりますが、
それによって求まる組み合わせは、下記の「6 通り」しか
ありませんので、かなりの回数が無駄になります。
  123
  132
  213
  231
  312
  312



改めて、1,2,3 の組み合わせについて考えてみましょう。

最初の数字は、1/2/3 のいずれかですよね。
最初の数字が 1 だった場合、次の文字は 2/3 のいずれかですよね。
最初が 1 で二番目が 3 だったら、次の文字は必ず 2 ですよね。


このように、後ろの桁になるほど選択肢が狭まることがわかります。
これはすなわち、組み合わせ数が『x! 通り』であるということです。
(先の私のコードでは、Except 拡張メソッドを再帰的に呼び出すことで対処しています)


計算してみると分かりますが、『x!』と『x^x』とでは、文字通り桁違いの数となります。

n = 2 なら「2」と「4」
n = 3 なら「6」と「27」
n = 4 なら「24」と「256」
n = 5 なら「120」と「3,125」
n = 6 なら「720」と「46,656」
n = 7 なら「5,040」と「823,543」
n = 8 なら「40,320」と「16,777,216」
n = 9 なら「362,880」と「387,420,489」
n =10 なら「3,628,800」と「10,000,000,000」
n =11 なら「39,916,800」と「285,311,670,611」
n =12 なら「479,001,600」と「8,916,100,448,256」

n =16 なら「20,922,789,888,000」と「18,446,744,073,709,551,616」

n =32 なら「263,130,836,933,693,530,167,218,012,160,000,000」と
「1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976」


※パンデジタル数では、先頭の数字が 0 になることがありませんので、
 10! = 3,628,800 通りではなく、10! - 9! = 3,265,920 通りです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
タイトル (できるだけ短く簡潔に)
メッセージ   図表モード   注意! 全角で40文字以内 (下記テキストボックスの範囲内) 【改行処理】 を必ずして下さい。   【マルチポスト】(複数の掲示板で同じ質問をする事) 【返信】(お礼) のできない方の投稿は、お断りします。 [注意事項]をよく読んでから投稿して下さい。    URLの投稿 は、最初の1文字を除いて ttp://hanatyan.sakura.ne.jp/ のようにして投稿して下さい。
暗証キー (英数字で8文字以内)
投稿キー (投稿時 投稿キー を入力してください)
  • 当掲示板をご利用になる場合は、必ず【掲示板ご利用に際し】をよく読んでからご利用願います。

  •   プレビュー
  • 質問される前に【当サイト内外の検索】を使って下調べをして下さい。

  • ★★★ 下記から自分の投稿記事を[修正]することができます ★★★
    処理 記事No 暗証キー
      累計    本日 昨日
    [.NET用掲示板] [VB6.0用掲示板] [サンプル投稿用掲示板] [雑談用掲示板]   [ツリー表示へ] [注意事項] [ワード検索] [Home]