vb.net - 将数字与方程式/算法联系起来

标签 vb.net algorithm visual-studio-2012 math anagram

我正在 Visual Basic 中制作一个变位词求解器,当您输入一个字符串时,它会为您提供所有可能的组合。我需要计算出有多少种组合,具体取决于字符串中的字符数量以及有多少不同的字符。

E.G.

Sample string:

abc

Total characters: 3, Different Characters: 3

Possible combinations: 6

abc, acb, bac, bca, cab, cba

我需要一个等式(使用字符数和不同字符)将其链接到包含不同字符数的字符串。 我一直在使用反复试验来尝试找出答案,但我无法完全理解它。到目前为止,我有:

((letters - 1) ^ (different letters - 1)) + (letters - 1)

它适用于一些不同的字母计数,但现在适用于所有。

请帮忙???

最佳答案

我会引导您找到答案,但我会尝试在整个过程中进行解释。假设您有 10 个不同的字母。第一个有 10 个选择,第二个有 9 个,第三个有 8 个,等等。最终,将有 10*9*8*7*6...*2*1 = 10!可能性。但是,有时您会有同一封信的多个实例。例如,将它用于字符串“aaabcd”会高估可能性,因为它将每个 a 都视为不同的字母,即使它们不是。要纠正这一点,您必须除以重复字母数的阶乘。计算可能性总数的一个好方法是(字母阶乘的总数)/(每个字母的重复实例数的阶乘的乘积)。

例如: “aaabcd”中的字母有 6!/(3!) 种排列方式
有6个!排列字母的方式是“abcdef”
"aaabbc"中的字母有 6!/(3!*2!) 种排列方式
“aaaaabbbcc”中的字母有 10!/(5!*3!*2!) 种排列方式

希望对您有所帮助。

关于vb.net - 将数字与方程式/算法联系起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24982753/

相关文章:

javascript - ASP.NET CodeBehind 无法识别 TinyMCE Textarea 更改

c# - Form中Load事件、Activate事件和Enter事件的区别

.net - 以最高权限运行计划任务

.net - VB.NET:如何知道哪个系统空闲的时间?

c++ - 如何使我的洪水填充算法更有效?

c++ - 数据结构中的 MST 和唯一性问题已解决 Ex?

c# - 文件名 'file' 太长或无效 Visual Studio 2010 和 2012

asp.net - Visual Studio 2012 - 数据库发布向导已停止?

c++ - C++ 的开源 Graph 类

c++ - visual studio 2012 中的 float 和 double 类型