我的一个朋友写诗,他背后有一个非常特殊的节奏图式。他的所有诗都有4个五线谱,每个五线谱有四条线。所以押韵模式就是这样:
1
2
3
4
2
5
4
6
5
7
6
8
7
1
8
3
他问我有多少排列,如果我可以计算它们,但我真的不知道从哪里开始,除了蛮力,我猜,这不是最佳解决方案。
(编程语言最好是java(script)/ pseudo)
干杯,丹尼尔
答案 0 :(得分:1)
因为每个押韵类型恰好发生两次和2次! = 2你有2 ^ 8 = 256种可能性假设线条不相等
答案 1 :(得分:0)
考虑创造诗歌排列需要做些什么,密切关注我们必须做出的选择。首先,我们制作了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项的排列数。
现在我们有一个排序,例如ABCDBEDFEGFHGAHC
,我们可以通过从类别A
中选择2个可能的项目中的一个来构建一首诗,然后从类别B中选择2个可能的项目中的一个,等等。
有多少种方法可以做到这一点?那么有2 ^ 8 = 256种方法可以做出8个独立的二元选择。即使有16行,在你做出前8个选择之后,剩下的“选择”也是强制的,因为每个类别只剩下一个选择。
所以总共有
8! * 2**8 = 40320 * 256 = 10321920
或者可能有超过1000万首诗的排列。
在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
答案 2 :(得分:0)
因为有1种线1 2 3 4 5 6 7 8
第一冷却壁的种类数可以是8 * 7 * 6 * 5 = 1680
第二个冷却壁可以是1 * 4 * 1 * 3 = 12
第3个冷却壁可以是1 * 2 * 1 * 1 = 2
和第4次保存可以是1 * 1 * 1 * 1 = 1
因此总可能性为1680 * 12 * 2 * 1 = 40320