在 NLP 上下文中,我正在研究一种有效的方法来定义单个和组合列表作为字符串输入的点分隔表示,例如:1 2 3 4 5 6 7 8 9。其中每个位置编号实际上是一个单词。
想象一个有 2 个单词的句子:
I want.
将此句子拆分为 2 个单词,其中位置为 I=1,want=2。 那么可能的单打和组合的位置是:
1、2、1.2、2.1、= 4 个结果
如果输入是3,那么我得到: 1, 2,3,1.2,1.3, 2.1, 2.3, 3.1, 3.2, 1.2.3, 1.3.2, 2.1.3, 2.3.1, 3.2.1, 3.1.2.= 15 个结果
我想定义一个 Java 操作,它给出字符串输入的单个/组合列表,例如:1 2 3 4 5 6 7 8 9。这应该类似于字符串列表,例如:
1,2,...., 9.8.7.6.5.4.3.2.1
N 个结果
看到一些结果与建议的阶乘 (3*2*1!=15) 不同,我认为这是另一个公式。
最佳答案
你想要permutations without replacement :
排列数 = n!/(n-r)!
如果句子中有 n 个单词,并且您想查看 r 个单词的句子中有多少种没有替换的排列,那么这个公式就是您的答案。
如果 n = r,则排列数 = n!,因为 0! = 1。
更新:
如果允许 r = 1, 2, 3...n 的排列,那么您必须对 r 求和。公式仍然是正确的。
关于java - 如果我们在句子中使用带有位置编号的单词,如何定义可能的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51921195/