私は1つのサイトでオリンピックのITなぞなぞを解くことでトレーニングしています。
私は2つの解決策を提供しました:
- C#
- PHP
オンラインの判断がPHPバージョンの方が速いことを示したとき、私は混乱しました!!! なんで?
C#:109ミリ秒3000 Kb
PHP:45ミリ秒0 Kb
どうして?
私は1つのサイトでオリンピックのITなぞなぞを解くことでトレーニングしています。
私は2つの解決策を提供しました:
- C#
- PHP
オンラインの判断がPHPバージョンの方が速いことを示したとき、私は混乱しました!!! なんで?
C#:109ミリ秒3000 Kb
PHP:45ミリ秒0 Kb
どうして?
与えられたプログラムを考えると、プログラムの重要な部分の実行時間(一意の文字を見つけること)は間違いなく109msかかりません。「オンライン判断」は、プロセスの起動、.NETの場合のJITtingなどを含む合計実行時間を測定しているように思われます。
これは、どの車がガレージから早く出るかを尋ね、それが車の速度を表すと考えるのと少し似ています。
これで、PHPのarray_unique
関数が実際に非常に高速で、おそらくLINQよりも高速である可能性があります...しかし、基本的に、ベンチマーク結果から有用な情報を取得することはできません。特に関心がない限り、ミリ秒ではなく秒単位で実行され、起動/ウォームアップ時間を含まないベンチマークを探す必要があります。
C#バージョンでは、不要と思われる3つの配列が作成されます。次のように置き換えることができます:
string input = Console.ReadLine();
int charCount = input.Distinct().Count();
if(charCount % 2 == 0) ...
以下はおそらくさらに速いでしょう:
int charCount = new HashSet<char>(input).Count;