2

私は1つのサイトでオリンピックのITなぞなぞを解くことでトレーニングしています。

私は2つの解決策を提供しました:

 - C# 

http://ideone.com/exF1HJ

 - PHP 

http://ideone.com/WbaPHY

オンラインの判断がPHPバージョンの方が速いことを示したとき、私は混乱しました!!! なんで?

C#:109ミリ秒3000 Kb

PHP:45ミリ秒0 Kb

どうして?

4

2 に答える 2

5

与えられたプログラムを考えると、プログラムの重要な部分の実行時間(一意の文字を見つけること)は間違いなく109msかかりません。「オンライン判断」は、プロセスの起動、.NETの場合のJITtingなどを含む合計実行時間を測定しているように思われます。

これは、どの車がガレージから早く出るかを尋ね、それが車の速度を表すと考えるのと少し似ています。

これで、PHPのarray_unique関数が実際非常に高速で、おそらくLINQよりも高速である可能性があります...しかし、基本的に、ベンチマーク結果から有用な情報を取得することはできません。特に関心がない限り、ミリ秒ではなく秒単位で実行され、起動/ウォームアップ時間を含まないベンチマークを探す必要があります。

于 2012-11-25T19:05:59.440 に答える
2

C#バージョンでは、不要と思われる3つの配列が作成されます。次のように置き換えることができます:

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 に答える