2

私はJavaでのフィボナッチヒープの実装に約1週間取り組んできました。これは、CLRSブックに基づいた実装です。

JavaのデフォルトのPriorityQueueと比較して、作業中のサイドプロジェクトでそれを使用してパフォーマンスが向上するかどうかを確認したかったのです。[Javaのデフォルトの実装は配列ベースであるため、はるかにローカルです。複雑さの限界が高いにもかかわらず、それでもFヒープを上回る可能性があります]。

私の問題は、min要素を削除した後のヒープの統合部分に起因しているようです。arrayindexoutofboundsexceptionsがスローされ続けます。特にwhileループでは、同じ次数を持つすべてのノードを統合します。D()関数で設定された範囲を超えています。

したがって、私のD()関数が間違っているか、そうではないと思います。または、何か他のことが起こっています。最も可能性の高い副作用関連。

コードはここにあります。私はこれを約1週間デバッグしようとしてきましたが、運が良かったです。明らかな何かが欠けていますか?

4

1 に答える 1

1

ノード次数の上限がフロアであってはならないかどうかわからないため、分析を確認する必要があります。D関数では、intへのキャストは小数部分を切り捨てています。これを丸めに変更すると、インデックスの範囲外エラーが解消されるようです。

ただし、追加の問題があるようです。私はどのような条件を追跡しませんでしたが、子リストにはセンチメンタルセットがない可能性があります。これにより、子リストは循環しているため、子リストをループするときにremoveMinが無限ループになります。

于 2009-08-31T01:19:14.750 に答える