1
ヒープデータ構造に関する質問があります。ヒープデータ構造の実装の迅速化
私は3つの公開機能を持っています。 正しい関数shiftUp
とshiftDown
を作成できません。
はshiftUp
に私は、ヒープ内の要素を比較し、交換してみてくださいその
これは私のコードの実装です:
class Heap {
var heap: [Int]
init(array: [Int]) {
self.heap = array
}
var findMax: Int { return heap.first! }
private var count: Int {return heap.count}
private func floor() -> Int {
let floor = log2(Double(heap.count))
return Int(floor)
}
private func indexOf(element: Int) -> Int {
return heap.index(of: element)!
}
private func parentIndex(index: Int) -> Int {
return floor()*(index-1/2)
}
private func leftChildIndex(index: Int) -> Int {
return 2*index+1
}
private func rightChildIndex(index: Int) -> Int {
return 2*index+2
}
private func swapIfNeed(first: Int,second: Int) {
swap(&heap[indexOf(element: first)] , &heap[indexOf(element: second)])
}
func shiftDown(index: Int) {
let parent = heap[parentIndex(index: index)]
let leftChild = heap[leftChildIndex(index: index)]
let rightChild = heap[rightChildIndex(index: index)]
if parent <= leftChild {
swapIfNeed(first: parent, second: leftChild)
shiftDown(index: index+1)
} else if parent <= rightChild {
swapIfNeed(first: parent, second: rightChild)
shiftDown(index: index+1)
}
}
private func shiftUp() {}
func removeMax() {
}
func addElement(element: Int) {}
}
スウィフトにヒープDSの私の実装を見つけてください。あなたの質問は明確ではありません。あなたは何の問題を抱えていますか?そして、あなたは最後の文章を完成させませんでした:* "私はヒープの要素を比較しようとし、それらの要素を交換しようとします。 – rmaddy
@rmaddy私はfunc shiftDownがどのように動作しなければならないかを理解しています – DmitrievichR
parentIndexメソッド 'return floor()*(index-1/2)'では何が行われますか? –