Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套循环,提高性能_C#_Algorithm - Fatal编程技术网

C# 嵌套循环,提高性能

C# 嵌套循环,提高性能,c#,algorithm,C#,Algorithm,我有一个字符串列表,以便将编号为“1”的字符串分组,比如string=“00000”属于第一组,string=“00001”属于第二组。所有的字符串长度相等。现在我比较第一组和第二组,第二组和第三组,很快…就像图中一样。将第一组中的第一个元素与第二组中的所有元素进行比较。直到每个字符串都被比较。有没有办法提高我的程序的性能?因此,我可以实现32000字符串与15长度 编辑 对过去的帖子感到抱歉。读完后我意识到我这样问是愚蠢的。 该计划的目标是简化程序。基于Quine–McCluskey算法 考虑

我有一个字符串列表,以便将编号为“1”的字符串分组,比如string=“00000”属于第一组,string=“00001”属于第二组。所有的字符串长度相等。现在我比较第一组和第二组,第二组和第三组,很快…就像图中一样。将第一组中的第一个元素与第二组中的所有元素进行比较。直到每个字符串都被比较。有没有办法提高我的程序的性能?因此,我可以实现32000字符串与15长度

编辑

对过去的帖子感到抱歉。读完后我意识到我这样问是愚蠢的。 该计划的目标是简化程序。基于Quine–McCluskey算法

考虑

000
001
010
011
100
101
110
111
我把它们按1的数目分组

000

001
010
100

011
101
110

111
然后我将组中的每个字符串与下一组进行比较

group 1
000

group 2
001
010
100

group 3
011
101
110

group1 -> group2
------------------
    000 -> 001 = 00-
    000 -> 010 = 0-0
    000 -> 100 = -00
------------------
group2 ->group3
--------------------  
    001 -> 011 = 0-1
    001 -> 101 = -01
    001 -> 110 = no output

    010 -> 011 = 01-
    010 -> 101 = no output
    010 -> 110 = -10

    100 -> 011 = no output
    100 -> 101 = 10-
    100 -> 110 = 1-0

---------------------
etc.
然后按数字1再次对输出进行分组,并再次进行比较,直到无法比较任何字符串

我需要实现一个15的变量,但它需要永远为程序完成。任何想法如何加快它。我在线程上测试它,但只是有一点改进

字符串数:2048变量长度:11时间:10分钟

需要实现

字符串数:32767变量长度:15时间:无法实现


输出隐含最终结果

老实说,您想要实现的目标并不明确。。。您的描述与代码不匹配。(例如,您的代码从未提到字符“1”。您从未使用调用
CompareString
的结果这一事实也令人怀疑。)LINQ应该使实现您对“将字符串与数字“1”分组”的描述变得简单有效:

var grouped = strings.GroupBy(x => x.Count(c => c == '1'));
这将只对每个字符串中的“1”个字符计数一次。您永远不需要将任何字符串与另一个字符串进行比较


如果这不是你真正想要做的,你需要澄清你的实际目标是什么。

我不知道如何写C#,但我想帮你。因此,我的代码是用Java编写的。

1.我认为
=
是一个
O(n)
操作,您的
比较可能是
O(nlgn)
其中
n=str1.Length
。使用更简单、更快的
O(n)
方法,查看时间是否减少:

private String CompareString(String str1, String str2) {
    StringBuilder sb = new StringBuilder(str1.length());
    for (int i = 0; i < str1.length(); i++) {
        if (str1.charAt(i) == str2.charAt(i))
            sb.append(str1.charAt(i));
        else
            sb.append('-');
    }
    return sb.toString();
}

我闻到一个XY问题。你真正想要完成的任务是什么?为什么你用C++和C标记这一点?你为什么要把c#和c#-4.0以及c#-3.0都包括进来?我喜欢这张图片,当我想说明一个问题不清楚的时候,这可能是我最喜欢的。返回的
CompareString()
没有用吗?我已经编辑了我的帖子。希望我已经解释过了well@Snippet:不,仍然不清楚“按组比较字符串”是什么意思。@Snippet:老实说,我仍然不太清楚-但我还是建议使用LINQ来表达它。它可能会以更清晰的代码结束。感谢@Jon Skeet。我会接受你的建议,开始学习LINQThnx以获得帮助。我已经使用了它,并从我的新版本中测试了可能的循环。对于长度为8的字符串,循环比较8次,在新字符串中比较4次。我知道“我的代码”最糟糕的情况是,如果有太多不同的字符,但我使用esum捕捉到的字符串将只有一个唯一的字符。@Snippet In
(一个长度为8的字符串)==(一个长度为8的字符串)
,虽然看起来只有1个比较,但实际上有8个。
 MintermsByOne = Loaded with string 000 001 and so on

CombineAndGroup(MintermsByOne);
 ImplicantsByOneFinal = TermsByOne; 
 while (CombineAndGroup(TermsByOne))
 {
        ImplicantsByOneFinal = TermsByOne; 
 }
var grouped = strings.GroupBy(x => x.Count(c => c == '1'));
private String CompareString(String str1, String str2) {
    StringBuilder sb = new StringBuilder(str1.length());
    for (int i = 0; i < str1.length(); i++) {
        if (str1.charAt(i) == str2.charAt(i))
            sb.append(str1.charAt(i));
        else
            sb.append('-');
    }
    return sb.toString();
}
private boolean isPowerOfTwo(int x) {
    return (x > 0 && (x & (x - 1)) == 0);
}