入力に基づいてソートアルゴリズムを選択する方法を知りたいと思っていたので、最高の効率を得ることができました。
入力のサイズ、入力の配置方法(昇順/降順)、または使用されるデータ構造などに依存する必要がありますか...?
入力に基づいてソートアルゴリズムを選択する方法を知りたいと思っていたので、最高の効率を得ることができました。
入力のサイズ、入力の配置方法(昇順/降順)、または使用されるデータ構造などに依存する必要がありますか...?
アルゴリズムの一般的な重要性、およびアルゴリズムの並べ替えにおける重要性は次のとおりです。
(*)正しさ - これが最も重要なことです。アルゴリズムが非常に高速で効率的であっても、それが間違っていれば、何の価値もありません。並べ替えでは、正しく並べ替える候補が 2 つある場合でも、安定した並べ替えが必要です。効率が悪くても安定した並べ替えアルゴリズムを選択します。これは目的に適しているため、もう一方は正しくないためです。
次は基本的に、実行時間、必要なスペース、および実装時間の間のトレードオフです (ライブラリを使用するのではなく、最初から何かを実装する必要がある場合は、わずかなパフォーマンスの向上のために、おそらく価値がありません)。
上記のトレードオフについて考える際に考慮すべき点がいくつかあります。
O(n^2)
)。O(nlogn)
最悪のケースがあります。それはそれらすべてに基づくべきです。
挿入ソートは小さなデータセットなどのクイックソートよりも高速である可能性があるため、データのサイズを考慮する必要があります。
アルゴリズムごとにワースト/平均/ベストケースの漸近ランタイムが異なるため、データの配置を知る必要があります(ワースト/平均ケースが同じであるのに対し、ワーストケースと平均が大幅に悪い場合もあります)
データがすでに特別な形式になっている場合、またはデータを新しいデータ構造に効率的に入れて自動的に並べ替えを行うことができる場合でも、非常に特殊な並べ替えアルゴリズムがあるため、使用されているデータ構造を知っておく必要があります( la BSTまたはヒープ)
非常に高いレベルで、挿入と各アルゴリズムの比較の比率を考慮する必要があります。
ファイル内の整数の場合、これはそれほど重要ではありませんが、コンテンツに基づいてファイルをソートしている場合は、当然、比較をできるだけ少なくしたいと思うでしょう。
ソート アルゴリズムの選択を決定する主な 2 つの要素は、時間の複雑さと空間の複雑さです。シナリオと利用可能なリソース (時間とメモリ) によっては、各並べ替えアルゴリズムが提供するものに基づいて、並べ替えアルゴリズムを選択する必要がある場合があります。
並べ替えアルゴリズムの実際のパフォーマンスは、入力データにも依存します。入力のサイズ、配列が既にどのように並べ替えられているかなど、入力データの特定の特性を事前に知っていると役立ちます。
たとえば、入力データに負でない整数が 1000 個しかないことが事前にわかっている場合、そのcounting sort
ような配列を線形時間でソートするために非常によく使用できます。
並べ替えアルゴリズムの選択は、空間と時間の制約、および入力データのサイズ/特性によって異なります。