【发布时间】:2018-07-15 19:55:58
【问题描述】:
我正在寻找最快的算法:
GOAL:输出在一行上找到的对出现的总数。单个元素可以在任何给定行上以任何顺序排列。
输入:
a;b;c;d
a;e;f;g
a;b;f;h
输出
a;b = 2
a;c = 1
a;d = 1
a;e = 1
a;f = 2
a;g = 1
b;c = 1
b;d = 1
我正在用 C# 编程,我有一个嵌套的 for 循环,添加了一个常见的类型字典,其中 string 类似于 a;b,当找到一个出现时,它会添加到现有的 int 计数中或在计数 = 0。
注意这一点:
a;b = 1
b;a = 1
应该简化为:
a;b = 1
我愿意使用其他语言,输出是一个纯文本文件,我将它输入到 Gephi 可视化工具中。
奖励:非常有兴趣知道这个特定算法的名称(如果有的话)。可以肯定的是。
String[] data = File.ReadAllLines(@"C:\input.txt");
Dictionary<string, int> ress = new Dictionary<string, int>();
foreach (var line in data)
{
string[] outStrings = line.Split(';');
for (int i = 0; i < outStrings.Count(); i++)
{
for (int y = 0; y < outStrings.Count(); y++)
{
if (outStrings[i] != outStrings[y])
{
try
{
if (ress.Any(x => x.Key == outStrings[i] + ";" + outStrings[y]))
{
ress[outStrings[i] + ";" + outStrings[y]] += 1;
}
else
{
ress.Add(outStrings[i] + ";" + outStrings[y], 0);
}
}
catch (Exception)
{
}
}
}
}
}
foreach (var val in ress)
{
Console.WriteLine(val.Key + "----" + val.Value);
}
【问题讨论】:
-
我刚刚发布了当前在我的笔记本电脑上运行的代码 :-)
-
这看起来像association rule learning,尽管没有假设您只关心超过某个阈值的关联。就像您只对一起出现超过 2 次的配对感兴趣。这个假设可以给你带来一些效率。
标签: c# algorithm performance