algorithm - 字典顺序排列如何在算法上工作?

标签 algorithm permutation lexicographic

或者例如,如果给定“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/

相关文章:

阅读文本的算法或模式

algorithm - 具有不同指数项的方程式的 FFT

python - 使用 heapq 进行反向字典顺序

java - 如何判断一个句子是否是疑问句(疑问句)?

algorithm - 两种编写函数的方法,效率有何不同?

c++ - 4乘3锁图案

java - 创建所有排列数组的排列算法

perl - 帮我完成应用程序的最后一部分?它通过暴力破解每个可能的方程来解决第 4 channel 上的任何倒计时数字游戏

bash - 当未提供 --stable 选项时,sort -n 是否可以预测地处理关系?如果有,怎么办?

go - 词汇文件名顺序是什么意思?