私はPHPで小さなアルゴリズムを書いています.n個の映画をレーティングで通過し、上位5つを保存します.
私の質問は、ストリームを読んでいるときに、評価の高い上位 5 つの映画を追跡する最も効率的な方法は何ですか? 現在、私は次のことを行っています。
- 5 つの映画を (movies[] という配列に) 読み込み、movies[][name] と movies[][rating] の 2 つのキーを使用します。
- array_multisort() を使用して、movies[rating] で配列を並べ替えます (現在、最高の評価は、movies[4] にあります)
- 次の映画で読む
- この新しい映画の評価 > movies[0][rating] の場合、movies[0] をこの新しい映画に置き換えます
- リストを並べ替える
- 完成するまで3~5を繰り返す
私の方法は機能しますが、読み取りのたびにリストをソートする必要があります。array_multisort() を使用するたびに、ソートするインデックスを構築するためだけに 5 つのムービーに対して for ループを実行する必要があるため、これはコストのかかる方法であると私は信じています。誰でもこれにアプローチするより良い方法を提案できますか?