2

我正在一个站点上解决奥林匹克 IT 谜题进行培训。

我提供了两种解决方案:

 - C# 

http://ideone.com/exF1HJ

 - PHP 

http://ideone.com/WbaPHY

网上判断的时候我一头雾水,那个PHP版本的速度更快!!!为什么?

C#:109 毫秒 3000 KB

PHP:45 毫秒 0 KB

怎么会这样?

4

2 回答 2

5

鉴于给定的程序,程序的重要部分的执行时间 - 查找唯一字符 - 绝对不会花费 109 毫秒。听起来无论涉及什么“在线判断”都是测量总执行时间,包括进程启动、.NET 的 JITting 等。

这有点像问哪辆车从车库里出来的速度更快,并认为它代表了汽车的速度。

现在完全有可能 PHP 的array_unique函数真的非常快,可能比 LINQ 更快……但基本上你无法从基准测试结果中获得任何有用的信息。您应该寻找执行时间为几秒钟而不是几毫秒的基准,并且包括启动/预热时间,除非这是您特别感兴趣的。

于 2012-11-25T19:05:59.440 回答
2

您的 C# 版本创建了三个您似乎不需要的数组。您可以将其替换为:

string input = Console.ReadLine();
int charCount = input.Distinct().Count();
if(charCount % 2 == 0) ...

以下可能更快:

int charCount = new HashSet<char>(input).Count;
于 2012-11-25T19:05:58.397 回答