查找具有特定汉明距离LINQ的琴弦

失败的科学家

如果我们运行以下命令(感谢@octavioccl的帮助)LINQ查询:

var result = stringsList
.GroupBy(s => s)
  .Where(g => g.Count() > 1)        
  .OrderByDescending(g => g.Count())
  .Select(g => g.Key);

它为我们提供了至少两次出现在列表中的所有字符串(但完全匹配,即汉明距离= 0)。

我只是想知道是否存在一个优雅的解决方案(到目前为止,我尝试过的所有解决方案都使用循环和丑陋的或正则表达式的计数器),可以在Where子句中指定汉明距离以获取位于其中的字符串指定的汉明距离范围?

PS:所有的弦长相等

更新

非常感谢krontogiannis的详细回答。如前所述,我想获得汉明距离低于给定阈值的字符串列表。他的代码为此工作得很好(再次感谢)。

剩下的唯一事情就是将字符串从“结果集”中取出并插入/添加到“列表”中

基本上这就是我想要的:

List<string> outputList = new List<string>();
foreach (string str in patternsList)
            {
                var rs = wordsList
    .GroupBy(w => hamming(w, str))
    .Where(h => h.Key <= hammingThreshold)
    .OrderByDescending(h => h.Key)
    .Select(h => h.Count());
outputList.Add(rs); //I know it won't work but just to show what is needed
            }

谢谢

克朗托吉尼斯

使用LINQ计算两个琴弦之间的汉明距离可以用一种优雅的方法来完成:

Func<string, string, int> hamming = (s1, s2) => s1.Zip(s2, (l, r) => l - r == 0 ? 0 : 1).Sum();

您的问题是关于“分组”的含糊之处。如您所见,要计算汉明距离,您需要两个字符串。因此,您要么需要计算字符串列表中所有单词相对于输入的汉明距离,要么需要计算列表中所有单词之间的汉明距离(或者需要告诉我们的其他不同:-))。

无论如何,我将给出两个输入示例

var words = new[] {
    "hello",
    "rellp",
    "holla",
    "fooba",
    "hempd"
};

情况1

var input = "hello";
var hammingThreshold = 3;

var rs = words
    .GroupBy(w => hamming(w, input))
    .Where(h => h.Key <= hammingThreshold)
    .OrderByDescending(h => h.Key);

输出将是这样的

hempd with distance 3
rellp holla with distance 2
hello with distance 0

情况二

var hs = words
    .SelectMany((w1, i) => 
        words
            .Where((w2, j) => i > j)
            .Select(w2 => new { Word1 = w1, Word2 = w2 })) // all word pairs except with self
    .GroupBy(pair => hamming(pair.Word1, pair.Word2))
    .Where(g => g.Key <= hammingThreshold)
    .OrderByDescending(g => g.Key);

输出将是这样的

(holla, rellp) (fooba, holla) (hempd, hello) with distance 3
(rellp, hello) (holla, hello) with distance 2

编辑要仅从第一个分组中获取单词,可以使用SelectMany

var output = rs.SelectMany(g => g).ToList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找具有特定汉明重量的下一个数字

来自分类Dev

汉明距离的倒数

来自分类Dev

汉明距离总和

来自分类Dev

有效使用python计算汉明距离

来自分类Dev

使用`dplyr`计算有效汉明距离

来自分类Dev

快速计算汉明距离

来自分类Dev

确定最小汉明距离

来自分类Dev

汉明距离与 powershell 的比较

来自分类Dev

查找ORB特征描述符之间的汉明距离

来自分类Dev

用于计算汉明距离的索引访问

来自分类Dev

古代Microsoft DBMS中的汉明距离

来自分类Dev

MSSQL BIT_COUNT(汉明距离)

来自分类Dev

NetLogo:删除给定汉明距离的乌龟

来自分类Dev

选择汉明距离为零的读数

来自分类Dev

用python解释汉明距离速度

来自分类Dev

如何计算CRC码的汉明距离

来自分类Dev

FLANN比赛之间的OpenCV汉明距离

来自分类Dev

优化的CUDA矩阵汉明距离

来自分类Dev

优化的CUDA矩阵汉明距离

来自分类Dev

(速度挑战)根据通用汉明距离,有没有更快的方法来计算距离矩阵?

来自分类Dev

汉明距离和简单匹配系数之间有什么关系?

来自分类Dev

获取以汉明= 1的距离分隔的所有字符串对(DNA)

来自分类Dev

计算两个整数矩阵/数据帧的所有行之间的成对汉明距离

来自分类Dev

汉明距离和简单匹配系数之间有什么关系?

来自分类Dev

获取以汉明= 1的距离分隔的所有字符串对(DNA)

来自分类Dev

LINQ to XML:查找具有特定属性的元素

来自分类Dev

LINQ to XML:查找具有特定属性的元素

来自分类Dev

mysql两汉字之间的汉明距离

来自分类Dev

如何计算两个short int的汉明距离?