或者例如,如果给定“abcd”,则字典排列将是:
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba
我凭直觉理解它是如何排序的,如果你给我任何一组字母或数字,我可以计算出它们应该如何排序,但不是数学上如何从一步到最后下一个。 例如: 从 abdc 到 acbd 的数学过程是什么?
最佳答案
好吧,一个选择可能是:
从一步到下一步,
- 令 p = n-1
- 你取第 (p) 个字母 abdc => d。
- 你根据你的命令取下一封信。
- 如果它存在,那么你写它,然后用剩下的字母排序结束你的单词
- 否则,p = p - 1,然后返回上一步。
- 你根据你的命令取下一封信。
不确定这是最好的方法。为什么要从一步到下一步?为什么不写所有的单词,从写 (n-1) 开始!以第一个字母开头的单词,然后是 (n -1)!秒...
a
a
...
a
b
b
...
b
对于这些单词中的每一个:继续(n-2)!第二个字母和 (n-2)!第三个字母:
ab
ab
...
ab
ac
ac
....
ac
....
ba
ba
...
bc
bc
....
等等
关于algorithm - 字典顺序排列如何在算法上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742297/