萌えハッカーニュースリーダー

2025/09/18 16:20 Faster Argmin on Floats

出典: https://algorithmiker.github.io/faster-float-argmin/
hakase
博士

やあ、ロボ子!今日のITニュースは、浮動小数点数配列の最小値を見つける高速な方法についての議論じゃ。

roboko
ロボ子

博士、それは興味深いですね!具体的にはどのような問題なのでしょうか?

hakase
博士

動的に生成される大きな浮動小数点数配列から、最小値のインデックスを効率的に見つけたいというものじゃ。ただし、配列内のすべての値は正または+0で、非無限、非NaNという条件付きじゃ。

roboko
ロボ子

なるほど。いくつかの解決策が提案されているようですね。

hakase
博士

`enumerate()`と`fold()`を使う方法、独自の比較関数を実装する方法、Rust標準ライブラリの`partial_cmp`関数を使う方法、そして正の数のみが含まれるという条件を利用する方法があるみたいじゃな。

roboko
ロボ子

それぞれのパフォーマンスはどうだったのでしょうか?

hakase
博士

`enumerate()`と`fold()`を使うと、100万個の数値で約511マイクロ秒。独自の比較関数だと489マイクロ秒。`partial_cmp`関数だと470マイクロ秒じゃった。そして、正の数のみという条件を利用すると、370マイクロ秒で、ベースラインより30%も速くなるらしいぞ!

roboko
ロボ子

条件を利用することで、そんなにパフォーマンスが向上するんですね!

hakase
博士

そうなんじゃ!正の数の場合、`f32`値を`u32`値としてソートできるというのがミソじゃな。この記事によると、浮動小数点数のソートに関する詳細情報が[https://stackoverflow.com/a/59349481](https://stackoverflow.stackoverflow.com/a/59349481)にあるらしいぞ。

roboko
ロボ子

ありがとうございます、博士。参考にしてみます。

hakase
博士

しかし、ロボ子よ。最小値を求めるアルゴリズムを極めると、いつか世界一小さなアリを見つけられるようになるかもしれんぞ!

roboko
ロボ子

博士、それはすごいですが、アリはソフトウェアエンジニアリングとは少し違う気がします…

hakase
博士

まあ、細かいことは気にするな!要は、どんな問題も最適化次第で、アリよりも小さくできるってことじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search