質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.85%

  • プログラミング言語

    643questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

(言語不問)全通りの組み合わせを作るアルゴリズム

解決済

回答 6

投稿

  • 評価
  • クリップ 1
  • VIEW 1,234

niship

score 29

お世話になります。
ふと気になったので、ご質問させて頂きます。
言語は問わないのですが、アルゴリズムをご教示頂けますと幸いです。

0123456789abcdefghijklmnopqrstuvwxyz

上記の文字列から全通りの組み合わせを配列にするためには、
どのようなアルゴリズムがありますでしょうか?

現実的に、
計算すると動作が固まってしまいますか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ozwk

    2018/01/12 09:31

    いや、何が「本当の意味」なんですか?

    キャンセル

  • quiqui

    2018/01/12 09:45

    アルゴリズムを考える時でも質問する時でも一緒なんですが、紙と鉛筆で解けるぐらいまで問題を小さくして、具体的な例で取り扱ったらいいと思います。例えば問題が abc だとしたら、欲しい出力は何ですか?

    キャンセル

  • maisumakun

    2018/01/12 09:46

    重複ありの場合、「0を無限に選び続ける」ようなパターンを含むのであれば、当然ながらパターン数も無限になります。どのようなパターンが許されるのか、もっと詳しく定義してください。

    キャンセル

回答 6

+7

まず、全パターンは、各文字について「入れるか入れないか」2通りなので、36文字についてそれを行えば、2の36乗通り(687
億通り)となります。

あとは、0から2の36乗-1までを順番に作っていって、各ビットが立っているかを文字の有無に対応付ければいいでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/12 09:45

    なお、これは重複しないことが前提です。

    キャンセル

  • 2018/01/12 10:11

    ご回答有難うございました。

    キャンセル

  • 2018/01/12 10:27 編集

    > 各文字について「入れるか入れないか」2通りなので、36文字についてそれを行えば、2の36乗通り(687億通り)
    36bitの組み合わせは確かにその通りなのですが、そのアルゴリズムは「順不同」なので、"34" と "43" が合わせて1通りという扱いになってしまうのではありませんか。

    キャンセル

  • 2018/01/12 12:50

    「組み合わせ」と取ったのでこういう回答なんだと思いますよ。

    キャンセル

  • 2018/01/13 09:09

    なるほど、「重複しない0~36文字の組み合わせ」と受け取るのであれば、その通りですね。

    キャンセル

checkベストアンサー

+5

36個(数字10+英字26)の順列組み合わせなら、その総数は 36! 個になります。
約 3.72 * 10^41 ですね。
現実的に全部出力しようとしたらとんでもないことになりますね。

毎秒1兆個(=10^12)の順列を出力できたとしても、3.72 × 10^29 秒。1日は 8.64 * 10^4 秒ですから、ざっくり 4.305 × 10^24 日。1年はざっくり 365.25 日として、
1.1787 × 10^22 年かかります。
宇宙の年齢が多く見積もっても 140億年(=1.4×10^10)ですから、宇宙開闢以来やってたとしても全然終わりが見えませんね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/12 10:12

    ご回答有難うございました。

    キャンセル

+4

重複可、長さ制限無しなら組み合わせは無限ですね。
メモリは有限なのでどの言語でも配列にはできない……と思います。

使い道次第ですが無限リストにすることで解決するかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/12 10:11

    ご回答有難うございました。

    キャンセル

+1

解決済になってしまいましたけど、「無限の組み合わせ」というのでこんなネタを、、配列にしてみました笑

言語はpython3です。pythonの場合正確にはリストですけども。

from random import randint

class randomStr(object):
    def __init__(self,n):
        self._n = n

    def __getitem__(self,_):
        strKinds = '0123456789abcdefghijklmnopqrstuvwxyz'
        result = ''
        while randint(0,self._n) != 0:
            result += strKinds[randint(0,35)]

        return result

if __name__=='__main__':
    arr = randomStr(10) # 毎回1/11の確率で連続が終了
    print(arr[5])
    print(arr[114514])

出力例

uqiz2w6dwk8zyrxl57m0d7y
i9sthvbtws021w6zi08gkftm

くだらないですね。ただのネタです。

テキトーなアカウント名生成するのには使えるかも…?

まぁ添字でアクセスするたびに結果が変わるので配列とは絶対に言えませんね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

もしかして総当たりでパスワードを破ろうとしていますか?
瞬時に解けるならパスワードの意味がありません。
8 文字程度のパスワードでも相当時間がかかります。
それを「固まる」と表現するなら固まります。
数秒とか数時間ではありません。数ヶ月とか数年単位です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/12 10:10

    質問にも書いている通り、ふと気になったので、質問させて頂いただけなのですが、そう捉えられるようであれば、削除申請しておきます。

    キャンセル

-3

勝手なこと蛇足ですが、この文章の質問で、パスワードの問題だ文字数指定しろよ。と理解できるのすごい。
僕は36文字の順列組み合わせだと読んで(36!だな)と思ってしまった。

よく読めば、レインボーテーブルの構築の概算を知りたいのかも、とわかったかも。

未来の技術は、結果を保存より高速に解を見つけ出すようですよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/17 11:57

    文字数不定で重複可なので 36! にはなりません。

    キャンセル

  • 2018/01/17 12:10

    質問者の質問に対する回答、ではなく個人の感想のようなので評価を下げさせていただきました
    特定の方の回答について何かおっしゃりたいことや疑問があれば、そちらのコメント欄にて議論すべきと思います

    キャンセル

  • 2018/01/17 13:56

    評価を下げるのに理由はいりません。そんなご丁寧に。
    特定の誰か向けでなく、あえて言えば質問向けにと投稿したので、
    新たな回答にしました。僕が言いたいことは上に書いたことです。
    誰かを揶揄してるように読めたらすみません。

    僕はtakitoさんが、僕が特定の方の回答に一言あると思った理由と、
    その内容を知りたいです。

    あるとすれば、質問は拙いなら、その人は初心者なんだろうし、
    質問者の知りたいことを解決できるような議論になればと思いました。

    いま読み返せば、組み合わせのアルゴリズムを質問しているので、
    文字列を降順に並べて昇順にバブルソート。という答えかも。

    質問者がバカにされる質問ってなんだよ。

    キャンセル

  • 2018/01/17 14:02

    くどい言い方になりますが、解決済みなので解決しているはずです。
    議論は不要でしょう。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    node.js(jsonwebtoken)の使用可能暗号アルゴリズムについて

    node.jsを用いてopenIdを認証に用いたシステムを express4で作っています。 jsonwebtoken,express-jwtライブラリを用いて作っているのですが、

  • 受付中

    vbscriptで配列内計算

    題名の通りです。 vbscriptで配列内計算する方法はありますか? 1+1にとどまらず、1+1+1+1+1+1+1と伸ばしていくことを前提としております。 説明が足りないと

  • 受付中

    アルゴリズムの入門書

    アルゴリズム入門の勉強におすすめの書籍、サイトなど教えてもらえないでしょうか? CheckiOというpython学習サイトを進めているのですが、難しくてなかなか進まないのでアルゴ

  • 受付中

    敵AIの経路探索について

    今、Unityで3Dのローグライクを作ろうとしていて敵を作成中なのですが障害物を検索し動的に避けてPlayerを追尾するといったことが中々上手くいっていません。 ちなみにフィ

  • 解決済

    疑似コードの記号について

    疑似コードで記されている、両端に矢印が付いた記号や、両端が四角の記号。 それと、処理の合間に入っている棒。 これらの作用を教えてください。

  • 解決済

    情報技術検定1級の問題でわからないところがあるので教えてください

    アルゴリズムの問題でわからないところがあるので教えてください。 問題 次の流れ図は、底辺の半径がr、高さがhの円錐の体積を求める処理を表している。 流れ図の中の空欄①~④に入れるべ

  • 受付中

    Pythonのxgboostでマルチコア使用方法

    Pythonでxgbを使用しているのですが、高速化するためにマルチコアで動かしたいです。 以下がプログラムです。 xgb_model = xgb.XGBClassifier(n

  • 受付中

    二分木探索のsearchの中身

    目的 二分木探索の実装 問題点 下記コードのBTNode searchの部分がどう書けばいいのか分かりません。 調べてみましたが、明確な解決策が見つかりませんでした。 ソー

同じタグがついた質問を見る

  • プログラミング言語

    643questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。