コンテキストに依存します。
「二次実行時のパフォーマンスバグの修正」は、通常私が見ているものです。ただし、それが修正(コードの変更)に値するかどうかはコンテキストに依存します。
データベースには、時間の複雑さを改善するための多くのツールが用意されていることに注意してください。たとえば、データベースから上位N個の結果を取得するには、そう言うだけです。非効率なクラッジを組み込みの最適化された呼び出しに変換する場合、説明は不要に思えます。
コードレビュー(議論)に値する2次ランタイムを備えたアルゴリズムを検討する理由は、遅いため(遅いのは相対的であり、指数関数と比較すると2次は速いため)ではなく、人間の直感(顧客など)仲間のプログラマー)は、日常生活からの期待が混ざり合っているため、線形ランタイムとはかけ離れたソフトウェア機能に本質的に不快です。
ソフトウェアのパフォーマンスに関する顧客からの苦情の多くは、次の2つのカテゴリに分類されます。
このため、顧客は両方が当てはまる場合、実行時間をバグと見なします。
- 線形より遅い
- 顕著な(典型的なタスクサイズを考慮して、人間の時間範囲内(秒または分より長い)に収まる)
二次ランタイムアルゴリズムが問題を引き起こさない(つまり、コード変更に値しない)ことを説明する正当な引数:
- この2次ランタイム関数によって通常処理されるタスクのサイズは、ある程度制限されています
- 典型的なサイズの範囲を考えると、実際の(絶対的な)実行時間はまだ無視できるほど小さい
- ユーザーが目立つほど大きいタスクを実際に送信しようとすると、ユーザーは実行時間が長いことを警告するメッセージを受け取ります。
- システムのユーザーはすべて専門家であるため、彼らは何をしているかを知っています。たとえば、APIのユーザーは、APIドキュメントの細字部分を読む必要があります。
典型的なアプリケーション開発に役立つ多くのアルゴリズムは、実際には線形よりも遅い(ほとんどの場合、ソートのようにO(N log N))ため、大規模なソフトウェアは実際に回避策を試みます。データ、または同様の効果を達成するヒストグラム(統計)フィルタリング手法を使用します。
これはソフトウェアの顧客に適用されますが、ソフトウェアライブラリまたはAPI関数のユーザーも「顧客」であると考える場合、答えは依然として適用されます。