ACM ICPC 2004–2005 Northeastern European contestで問題Hに取り組んでいます。
問題は基本的に、ヒープを構築するためのアルゴリズム(シフトダウン)で最大数の交換を生成する最悪のケースを見つけることです。
- 入力:入力ファイルにはが含まれています()。
- 出力:ヒープになるように、からまでの異なる整数を含む配列を出力します。これをソートされた配列に変換すると、シフト操作の交換の合計数が最大になります。
入力例:6
対応する出力:6 5 3 2 4 1
そして基本的な出力:
[2, 1]
[3, 2, 1]
[4, 3, 1, 2]
[5, 4, 3, 2, 1]
[6, 5, 3, 4, 1, 2]
2
あなたは基本的に「なぜ私のコードはとても遅いのですか」と尋ねていますか?私はこの質問があまりにもローカライズされていると思うし、とにかくでより良い属するスタックオーバーフロー
—
蘭G.
いいえ、本当に、ヒープソートアルゴリズムの最悪のケースを見つけたいです。しかし、私のコードはこれらのケースを理解しようとする試みです。
—
jonaprieto 2012
配列の可能なすべての順序でヒープソートを試したい場合、アルゴリズムが極端に遅いことはそれほど驚くことではありません。実行時間は少なくともであり、指数関数的に増加します。10!すでに360万です。あなたは理論的な分析でより良いでしょう。(質問の冒頭を読み違えたためコメントを再投稿したため、コメントの2番目の部分は無効でした)
—
Alex ten Brink 2012
これは役に立つかもしれません。