此字谜子串搜索算法中的数学

Posted

技术标签:

【中文标题】此字谜子串搜索算法中的数学【英文标题】:Math in this anagram substring search algorithm 【发布时间】:2019-06-10 01:47:42 【问题描述】:

在以下代码中:

function sherlockAndAnagrams(s) 
var pairs = 0;
var subStrings = ;

//find all substrings of our string, count them in a hash
for(var i = 0; i < s.length; i++)
    for(var j = i; j < s.length; j++)
        let tempSubString = s.substring(i, j+1).split("").sort().join("");
        if(subStrings[tempSubString])
            subStrings[tempSubString] +=1;
        else
            subStrings[tempSubString] = 1;
        
    


//****ATTENTION******
for(var keys in subStrings)
    if(subStrings[keys] > 1)
    let temp = (subStrings[keys])*(subStrings[keys]-1)/2;
       pairs += temp;
   

return pairs;

我不确定这个公式背后的数学原理:

subString[keys])*(subString[keys]-1)/2

假设 s = "kkkk",则 "k"s 将有 6 个字谜

有人可以解释一下吗?

此外,这种情况告诉我,我可能在某些类型的数学方面有些欠缺。如果你能给我一个很好的材料来学习这样的数学,我会很感激的!

【问题讨论】:

【参考方案1】:

逻辑如下:您有n 单词,它们是彼此的字谜。你可以从那里选择多少对字谜?这是一个简单的combinatoric 问题,答案是已知的:binominal coefficient of (n,2),即n*(n-1)/2

逻辑是,如果计算所有字谜,第一个字谜可以n 方式选择,第二个以n-1 方式选择,但每个字谜将被考虑两次:一次为ab=ba,另一次为@ 987654329@

【讨论】:

非常感谢您的清晰解释,并让我知道这个问题的确切数学术语是!我上过的最高数学课是商业微积分(而且我已经有好几年没上这些课了),我想知道在我学习更多算法时,你是否有什么书/材料推荐让我复习。

以上是关于此字谜子串搜索算法中的数学的主要内容,如果未能解决你的问题,请参考以下文章

在不到一秒的时间内执行一个字谜检查器算法

获取所有子串(拼字游戏)的字谜的所有单词列表的算法?

PHP中的字谜算法

在一个字符串中搜索另一个字符串的字谜?

最快的子串搜索算法是啥?

相似子串快速搜索