0

私の友人は詩を書いていますが、その背後には非常に特別なリズムのスキーマがあります。彼の詩にはすべて 4 つの譜表があり、各譜表には 4 つの行があります。したがって、押韻スキーマは次のようになります。

1
2
3
4

2
5
4
6

5
7
6
8

7
1
8
3

彼は私に順列がいくつあるか、そしてそれらをすべて計算できるかどうか尋ねましたが、最適な解決策ではないブルートフォースを除いて、どこから始めればよいか本当にわかりません.

(プログラミング言語はjava(script)/pseudoが望ましい)

乾杯、ダニエル

4

3 に答える 3

1

各押韻タイプは正確に 2 回と 2! = 2 行が等しくないと仮定すると、2^8 = 256 の可能性があります

于 2013-10-09T12:20:06.500 に答える
0

線は8種類あるので 1 2 3 4 5 6 7 8

第 1 譜表が取りうる種類の数は 8*7*6*5 = 1680 です

2 番目の譜表は 1*4*1*3 = 12 にすることができます

3 番目の譜表は 1*2*1*1 = 2 にすることができます

4 回目の保存は 1*1*1*1 = 1 にすることができます

したがって、可能性の総数は 1680*12*2*1 = 40320 です。

于 2013-10-09T14:12:12.573 に答える
0

途中で行う必要のある選択に細心の注意を払いながら、詩の順列を作成するために必要なことを考えてみましょう。まず、それぞれに 2 つの押韻行 (または単語) を含む 8 つのカテゴリを作成します。

rhymes = {
    'A': ['fade', 'made'],
    'B': ['cow', 'how'],
    'C': ['can', 'fan'],
    'D': ['a', 'hey'],
    'E': ['answer', 'hampster'],
    'F': ['whiz', 'is'],
    'G': ['smut', 'what'],
    'H': ['key', 'we'],
    }

詩を作成するには、カテゴリの順序を選択する必要があります。韻を踏むスキームを考えると[1,2,3,4,2,5,4,6,5,7,6,8,7,1,8,3]、それはABCDBEDFEGFHGAHC. しかし、それは同様にうまくいく可能性がありますHGFEGDECDBCABHAF。押韻スキームに適合するカテゴリには、多くの可能な順序があります。全部で8つあります!= 8*7*6*5*4*3*2*1 = カテゴリの 40320 の順序。組み合わせ論では、これは 8 項目の順列の数と呼ばれます。

のような順序付けができると、カテゴリ から 2 つの可能な項目のうち 1 つを選択し、次にカテゴリ B から 2 つの可能な項目のうちABCDBEDFEGFHGAHC1 つを選択することで、詩を作成できます。Aこれを行うにはいくつの方法がありますか? 8 つの独立したバイナリ選択を行うには、2^8 = 256 通りの方法があります。16 行ありますが、最初の 8 つの選択を行うと、各カテゴリに 1 つの選択肢しか残っていないため、残りの「選択」が強制されます。

したがって、合計で

8! * 2**8 = 40320 * 256 = 10321920

または、1,000 万を少し超える詩順列が可能です。


疑似コードにいくぶん近い Python では、次のように詩を列挙できます。

import itertools as IT

rhymes = [
    ['fade', 'made'],
    ['cow', 'how'],
    ['can', 'fan'],
    ['a', 'hey'],
    ['answer', 'hampster'],
    ['whiz', 'is'],
    ['smut', 'what'],
    ['key', 'we'],
    ]

scheme = [1,2,3,4,2,5,4,6,5,7,6,8,7,1,8,3]
# shift by 1 since Python uses 0-based indexing
scheme = [i-1 for i in scheme]

# 40320 itmes in orderings
orderings = IT.permutations(rhymes)

count = 0
for ordering in orderings:
    # 256 ways to select the lines given an ordering
    for lines in IT.product(*[IT.permutations(line)
                              for line in ordering]):
        lines = map(iter, lines)
        for i in scheme:
            print(next(lines[i]))
        count += 1
        print

print(count)

たとえば、

fade
cow
can
a
how
answer
hey
whiz
hampster
smut
is
key
what
made
we
fan
于 2013-10-09T13:40:53.303 に答える