(аа був би одним із багатьох, bb не став)
Я думав, що це буде 10! / 8! Але, мабуть, я роблю щось не так. Хто-небудь може мені допомогти, тому що я наткнувся.
(аа був би одним із багатьох, bb не став)
Я думав, що це буде 10! / 8! Але, мабуть, я роблю щось не так. Хто-небудь може мені допомогти, тому що я наткнувся.
Відповіді:
У вас є 6 різних літер: a, b, c, d, e, f, з яких ви можете генерувати 6 x 5 = 30 слів з двома різними літерами. Крім того, ви можете генерувати 3 слова aa, cc, dd з однаковою літерою двічі. Отже загальна кількість слів становить 30 + 3 = 33.
Альтернатива методу Захави: існує способів сполучення двох букв af. Однак символів немає 2 b, e або f, тому "bb", "ee" і "ff" неможливі, тому кількість слів 36 - 3 = 33 .
Те, як ви намагалися підійти до проблеми, здається, ігнорує той факт, що немає 10 різних літер. Якщо у вас було 10 різних літер, то ваша відповідь була б правильною.
Якщо ви не можете це пояснити "розумним" способом, часто варто спробувати грубу силу. Уявіть, що намагаєтесь записати алфавітно впорядкований список усіх слів, які ви можете скласти.
Скільки можна починати з «А»? Ну а "А" може супроводжуватися A, B, C, D, E або F, тож це шість способів.
Скільки можна починати з «В»? За цим може слідувати A, C, D, E або F, що є лише п’ятьма способами, оскільки не існує другого "B".
Скільки можна починати з "C"? Оскільки "C" відображається у вашому списку тричі, його можна супроводжувати як самим, так і будь-яким з інших п'яти літер, так само як і для "A", існує шість способів. Зауважте, що ми не отримуємо жодних "зайвих" способів лише тому, що "C" з'являється більше разів, ніж "A"; все, що перевищує другу появу, є зайвим.
Сподіваємось, зараз зрозуміло, що кожна літера, що з’являється лише один раз у вашому списку, може з’являтися на початку п'яти слів, а літери, які з’являються двічі або більше, можуть з’являтися на початку шести слів. Букви, що з’являються лише один раз, - це "B", "E" і "F", кожне з яких може бути на початку п'яти слів, так що складає 5 + 5 + 5 = 15 слів. Літери, які з’являються двічі або більше, - це "A", "C" і "D", кожне з яких може бути на початку з шести слів, так що виходить 6 + 6 + 6 = 18 слів. Всього є 15 + 18 = 33 слова.
Це більш завзято, ніж інші методи, але, намагаючись думати про відповідь таким систематичним способом, можливо, ви змогли «помітити» один із швидших методів.
Зауважте, що якби це було викладено як питання про ймовірність, вашим першим нахилом, можливо, було б скласти схему дерева . Для першої літери воно починалося б із шести гілок, але для другої літери було б шість гілок, що виходять із "А", "С" та "D" (тому що за ними може слідувати будь-яка з шести літер) але лише п'ять гілок, що виходять із "B", "E" та "F" (тому що вони не можуть слідувати самі собою). Ця схема розгалуження фактично така сама, як і в моїй відповіді, але ви, можливо, вважаєте за краще подумати про неї більш візуально на дереві.
З математичної точки зору рішення - це сукупність елементів декартового твору між списком і самим колись знятим діагоналем. Вирішити цю проблему можна за допомогою цього алгоритму:
Набір - це чітко визначена колекція різних об'єктів, отже, об'єкти не повторюються.
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
Я вважаю, що причина деяких вважає це питання незрозумілим у тому, що він використовує термін "2-літерні слова". З огляду на те, як всі підходять до рішення, всі вони інтерпретують "двобуквенні слова", щоб означати щось на зразок "літерних пар". Як завзятий гравець Scrabble, я одразу сприйняв питання, яке означає: "Скільки законних слів з двох літер можна зробити з цих букв?" І ця відповідь - 12! Принаймні, згідно з останньою редакцією Офіційного словника гравців Scrabble (OSPD5). Слова - aa, ab, ad, ae, ba, be, da, de, ed, ef, fa, fe. (Будь ласка, майте на увазі, що той факт, що ви ніколи не чули про багато цих слів, не скасовує їх дійсності!); O)
Просто моє «2 почуття».
Ще один спосіб порахувати без грубої сили:
Якщо перша літера є a, c або d, то для другої літери залишилось 6 різних варіантів.
Але якщо перша буква є b, e або f, для другої літери залишилося лише 5 різних варіантів.
Так є виділити два буквені слова.
У тому, як ви ставите своє запитання, існує проблема. Які дії фактично дозволено в рядку "aabcccddef" приймати слово з двох букв? Чи можемо ми замінити останнє або лише перекреслити непотрібне? Я знайшов дві можливі відповіді залежно від цих умов:
1) Це ми можемо будь-яким чином замінити букви на відповідь як на 33, як згадувалося раніше. 30 пар різних літер (6 * 5) і 3 пари подібних букв.
2) Якщо ми не можемо переключити місця букв і можемо лише перехрещуватися, ми отримаємо набагато менше відповідей. Давайте порахуємо від початку до кінця. Починаючи з "а", у нас є 6 букв, щоб бути другими, починаючи з "б", це лише 4. "с" також має 4, "d" - 3 і "e" - 1. Це всього 18.
моя відповідь на питання: Скільки двох буквених слів можна отримати від aabcccddef
* // Суть у тому, що запитання читається, "слова", а не комбінації пар. Використовуючи слова, які букву довелося б з’являтись двічі, щоб використовувати слово більше одного разу, наприклад, два букви «а» і два букви «d», тому «оголошення» як слово можна записати двічі.
[self-study]
тег і прочитайте його вікі .