aabcccddefから2文字の単語をいくつ取得できますか


14

(aaは多数ありますが、bbはそうではありません)

10!/ 8だと思いました!しかし、どうやら私は何か間違ったことをしているようです。私は困惑しているので、誰も私を助けることができます。


6
試したことを見せてくれてありがとう。10!/ 8と思った理由を説明してください!これはあなたが持っている概念的な誤解を修正するのに役立つかもしれませんか?また、これはコースや教科書からの質問ですか?その場合は、[self-study]タグを追加してそのwikiを読んでください。
シルバーフィッシュ

(この質問の作成者は元々「自習」タグを追加していませんが、この質問は自習ガイドラインの範囲内に収まると思います。例えば、彼らが試したことを見せてくれて、質問自体は明らかですRoryTの答えは、おそらく10!/ 8!の答えの背後にある考えの欠陥を示していますが、もちろん元のポスターがこれを確認できればいいと思います。)
Silverfish

1
一部の人は、これを「不明」であるとして閉鎖することを投票しています。ここで何が不明瞭かはわかりませんが、与えられた答えは、質問が十分に理解され、明確にされたことを示しています。
kjetil bハルヴォルセン

2
2文字の単語を作成する場合、使用可能な文字のリストに「c」が3回表示されるのはなぜですか?

3
@statman私もこれに気づきました(以下のコメントを参照)が、振り返ってみると、質問設定者がそれを含めることの工夫に感心します。それは残酷な追加ではありませんが、余分な瞬間を考える必要があります。
シルバーフィッシュ

回答:


22

6つの異なる文字があります:a、b、c、d、e、fのうち、2つの異なる文字で6 x 5 = 30ワードを生成できます。さらに、同じ文字で3つの単語aa、cc、ddを2回生成できます。したがって、単語の総数は30 + 3 = 33です。


17

Zahavaの方法に代わる方法:2つの文字a〜fをペアリングする方法があります。ただし、2 b、e、fの文字がないため、「bb」、「ee」、「ff」は使用できないため、単語の数は36 3 = 33になります。62=36363=33

あなたが問題にアプローチしようとした方法は、10個の明確な文字がないという事実を無視するようです。10個の個別の文字がある場合、答えは正しいでしょう。


4
(+1)実際、10個の文字があるという事実は、ここでは3つが「C」であるため、少し赤いニシンです。2文字の単語をいくつ作成できるかという点では、「C」が50回出現するかどうかは問題ではありません。同じ文字の2つ以上の外観は冗長です。
シルバーフィッシュ

7

「賢い」方法でそれを推論できない場合、ブルートフォースを試す価値があります。あなたが作ることができるすべての単語のアルファベット順にリストを書き下そうとすることを想像してください。

「A」で始まるものはいくつですか?「A」の後には、A、B、C、D、E、またはFが続くため、6つの方法があります。

「B」で始まるものはいくつですか?その後にA、C、D、E、またはFが続く場合がありますが、2番目の「B」はないため、5つの方法しかありません。

「C」で始まるものはいくつですか?「C」はリストに3回現れるので、「C」の後に単独で、または他の5文字のいずれかを続けることができるため、「A」と同様に6つの方法があります。「C」が「A」よりも多く表示されるという理由だけで、「余分な」方法を取得しないことに注意してください。2番目の外観を超えるものは冗長です。

リストに1回だけ表示される各文字が5語の先頭に表示され、2回以上表示される文字が6語の先頭に表示されることは明らかです。一度だけ現れる文字は「B」、「E」、および「F」であり、それぞれ5語の先頭にあるため、5 + 5 + 5 = 15語になります。2回以上現れる文字は「A」、「C」、および「D」であり、それぞれ6語の先頭にあるため、6 + 6 + 6 = 18語になります。合計で15 + 18 = 33ワードです。

これは他の方法よりも時間がかかりますが、この体系的な方法で答えを考えてみると、高速な方法の1つを「見つける」ことができた可能性があります。

これが確率の質問として表現されていた場合、最初の傾向はツリー図を描くことだったかもしれないことに注意してください。最初の文字は6つのブランチから始まりましたが、2番目の文字は「A」、「C」、「D」から6つのブランチが出ていたはずです(6文字のいずれかが後に続くため)ただし、「B」、「E」、および「F」から出てくるブランチは5つだけです(これらのブランチには自分自身が続くことができないため)。この分岐パターンは事実上、私の答えと同じですが、ツリーでより視覚的に考えることを好むかもしれません。


1
これは非常に真実です。答えの上限または下限の概算を取得するには、ブルートフォースを使用します(包含除外原則を使用する場合があります)。
-smci

3

数学的アプローチ

数学的な観点から見ると、解は、リストと対角線を取り除いたものとの間のデカルト積の要素のセットです。このアルゴリズムを使用してこの問題を解決できます。

  • リストとそれ自体の間のデカルト積を計算します。
  • 対角線を削除する
  • 配列からセットを作成します

セットは明確なオブジェクトの明確に定義されたコレクションであるため、オブジェクトは繰り返されません。

Pythonへの翻訳

from itertools import product
import numpy as np

letters = list("aabcccddef")
cartesianproduct = np.array(["".join(i) for i in product(letters,letters)]).reshape(10,10)


cartesianproduct

Out :
array([['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
       ['aa', 'aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
       ['ba', 'ba', 'bb', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
       ['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'dd', 'de', 'df'],
       ['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ee', 'ef'],
       ['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe', 'ff']], 
      dtype='|S2')

対角線を削除します

diagremv = np.array([ np.delete(arr,index) for index,arr in enumerate(cartesianproduct)]) 

diagremv

array([['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
       ['aa', 'ab', 'ac', 'ac', 'ac', 'ad', 'ad', 'ae', 'af'],
       ['ba', 'ba', 'bc', 'bc', 'bc', 'bd', 'bd', 'be', 'bf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['ca', 'ca', 'cb', 'cc', 'cc', 'cd', 'cd', 'ce', 'cf'],
       ['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
       ['da', 'da', 'db', 'dc', 'dc', 'dc', 'dd', 'de', 'df'],
       ['ea', 'ea', 'eb', 'ec', 'ec', 'ec', 'ed', 'ed', 'ef'],
       ['fa', 'fa', 'fb', 'fc', 'fc', 'fc', 'fd', 'fd', 'fe']], 
      dtype='|S2')

要素セットの長さを計算します。

len(set(list(diagremv.flatten())))

Out: 33

1
私はあなたがブルートフォース法形式化、自動化することを好む
ティムSeguine

2

「2文字の単語」という用語を使用しているため、疑問が不明確だと考える人がいると思います。誰もが解決策に近づいている方法を考えると、全員が「2文字の単語」を「文字のペア」のようなものと解釈しています。熱心なスクラブル奏者として、私はすぐに「これらの文字から正当な2文字の単語をいくつ作成できるか」という質問に答えました。そしてその答えは-12!少なくとも、公式スクラブルプレーヤー辞書(OSPD5)の最新版によると。単語は、aa、ab、ad、ae、ba、be、da、de、ed、ef、fa、およびfeです。(これらの単語の多くを聞いたことがないという事実は、その有効性を否定しないことに注意してください!); o)

ちょうど私の「2感覚」。


1

総当たりなしでカウントするさらに別の方法:

最初の文字がa、c、またはdの場合、2番目の文字には6つの異なる残りの選択肢があります。

しかし、最初の文字がb、e、またはfの場合、2番目の文字には5つの異なる選択肢しかありません。

36+35=33


0

質問の仕方に問題があります。行 "aabcccddef"で実際に許可されるアクションは2文字の単語ですか?後者を置き換えることはできますか、それとも不必要なものを越えるだけですか この条件に応じて2つの可能な答えが見つかりました。

1)前に述べたように、33のように文字を任意の方法で置き換えることができます。30組の異なる文字(6 * 5)と3組の類似文字。

2)文字の場所を切り替えることができず、交差することしかできない場合、答えははるかに少なくなります。最初から最後まで数えましょう。「a」で始まる2番目の文字が6つあり、「b」で始まるのは4文字だけです。「c」には4、「d」-3、「e」-1があります。これは18文字です。


-1

質問に対する私の答え:aabcccddefから2文字の単語をいくつ取得できますか

  1. aa; 2. ab; 3.広告; 4. ae; 5.広告; 6. ba; 7. be; 8. de; 9. fa; 10. fe

* //ポイントは質問の読み取りであり、「単語」はペアの組み合わせではありません。単語を使用すると、文字を2回表示する必要があります。たとえば、2つの文字「a」と2つの文字「d」があるため、「ad」を単語として2回記述することができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.