[ 最新の更新:ベンチマークプログラムと暫定版が利用可能、以下を参照]
そこで、古典的なアプリケーションであるソートを使用して、速度と複雑さのトレードオフをテストしたいと思います。
浮動小数点数の配列を昇順で並べ替えるANSI C関数を記述します。
あなたは使用することはできません任意のライブラリ、システムコール、マルチスレッドまたはインラインASMを。
エントリは、コード長とパフォーマンスの2つのコンポーネントで判断されます。スコアは次のとおりです。エントリは、長さ(空白なしの#charactersのログなので、フォーマットを維持できます)およびパフォーマンス(ベンチマークの#secondsのログ)、および各間隔[best、worst]に線形に正規化されます0,1]。プログラムの合計スコアは、2つの正規化されたスコアの平均になります。最低スコアが勝ちます。ユーザーごとに1つのエントリ。
ソートは(最終的に)適切に行われる必要があります(つまり、入力配列には戻り時にソートされた値が含まれる必要があります)。名前を含む次の署名を使用する必要があります。
void sort(float* v, int n) {
}
カウントされる文字:sort
関数に含まれる文字、署名が含まれ、それに呼び出される追加の関数(ただし、テストコードは含まれません)。
プログラムはfloat
、長さ> = 0、最大2 ^ 20の任意の数値と配列を処理する必要があります。
sort
テストプログラムにプラグインとその依存関係をプラグインし、GCCでコンパイルします(派手なオプションはありません)。たくさんの配列をそこに入れて、結果の正確さと合計実行時間を確認します。テストは、Ubuntu 13のIntel Core i7 740QM(Clarksfield)で実行されます。
アレイの長さは、許容される範囲全体に渡り、短いアレイの密度が高くなります。値はランダムで、ファットテール分布(正と負の両方の範囲)になります。重複した要素はいくつかのテストに含まれます。
テストプログラムはこちらから入手できます。https : //gist.github.com/anonymous/82386fa028f6534af263
提出物をとしてインポートしuser.c
ます。TEST_COUNT
実際のベンチマークのテストケースの数()は3000です。質問のコメントでフィードバックを提供してください。
締め切り:3週間(2014年4月7日、16:00 GMT)。2週間後にベンチマークを掲載します。
競合他社にコードを渡さないように、締め切り近くに投稿することをお勧めします。
ベンチマーク発行時点での予備結果:
いくつかの結果があります。最後の列は、スコアをパーセンテージで示しており、高いほど良いので、ジョニーケージが1位になります。他のアルゴリズムよりも桁違いに遅いアルゴリズムをテストのサブセットで実行し、時間を推定しました。Cのものqsort
は比較のために含まれています(ジョニーの方が高速です!)。終了時に最終比較を行います。