【发布时间】:2016-04-06 07:49:10
【问题描述】:
我有这组(希腊)字符串:
ἸἼΙἹἽ, ῇηἤήῃὴῆἡἠἢᾖἥἣῄἦᾗᾐἧᾔᾑ, σ , οὸόὀὄὅὂ, ὺὖυῦύὐὑὔΰϋὕὗὓὒῢ
我想找出这 5 个字符串中所有可能的字符排列。例如,Ἰῇσοὺ、Ἰῇσοὖ、Ἰῇσου等。我知道它应该涉及递归,因为字符串的数量不固定,但我是初学者,我完全被递归吓傻了。
我在 Python 中执行了以下操作,它确实为我提供了每个字符串中字符的所有组合。但我需要'ἸἼΙἹἽ'始终排在第一位,'ῇηἤήῃὴῆἡἠἢᾖἥἣῄἦᾗᾐἧᾔᾑ'第二,'σς'第三,等等。
# -*- coding: utf-8 -*-
def Gen( wd, pos, chars ):
if pos < len( chars ):
for c in chars:
for l in c:
Gen( wd + l, pos + 1, chars )
else:
print wd
chars = [ u'ἸἼΙἹἽ', u'ῇηἤήῃὴῆἡἠἢᾖἥἣῄἦᾗᾐἧᾔᾑ', u'σς', u'οὸόὀὄὅὂ', u'ὺὖυῦύὐὑὔΰϋὕὗὓὒῢ' ]
Gen( "", 0, chars )
感谢大家的帮助。我的头脑完全被炸毁了。递归!以下是我最终在 Python 中所做的事情:
# -*- coding: utf-8 -*-
s = [ u'ἸἼΙἹἽ', u'ῇηἤήῃὴῆἡἠἢᾖἥἣῄἦᾗᾐἧᾔᾑ', u'σς', u'οὸόὀὄὅὂ', u'ὺὖυῦύὐὑὔΰϋὕὗὓὒῢ' ]
results = []
def recur( wd, strings ):
index = 0
if index < len( strings ):
for c in strings[ index ]:
recur( wd + c, strings[ index + 1: ] )
else:
results.append( wd )
def main():
recur( '', s )
for r in results:
print r.encode( 'utf-8' )
main()
【问题讨论】:
-
用笔和纸算出算法。
-
Ἰῇσοὺ, Ἰῇσοὖ, Ἰῇσου, ... 对于每个 u,然后每个 o 对于每个 u。然后每个 o 和 u 的每个 sigma ......等等。但我不知道如何使用递归进行编码。
-
你永远必须使用递归。您可以从所有唯一字符的数组开始使用 for/while 循环。
-
是的,但字符串的数量不固定。在这种情况下,我有 5 个字符串,但通常用户将确定字符串的数量......以及每个字符串的内容。
标签: recursion permutation