Web Analytics

bwarr

⭐ 116 stars Japanese by dronnix

それは何ですか?

CI codecov Go Reference Go Report Card

ブラックホワイト配列(別名BWArr)は、配列に基づく高速かつ順序付きのデータ構造で、$O(\log N)$ のメモリアロケーションを特徴としています。

データ構造

ブラックホワイト配列のアイデアは、教授Z. George Mouによって考案され、Black-White Array: A New Data Structure for Dynamic Data Setsにて発表されました。このリポジトリは最初の公開実装を含みます。

Professor Z. George Mou

主な特徴:

トレードオフ

ベンチマーク

Google BTreeとの比較ベンチマーク。

#### 挿入 N個のユニークなランダムint64値を空のデータ構造に挿入する際の時間、割り当て回数、割り当てバイト数を測定。BWArrとBTreeはどちらも空から開始し、値を一つずつ挿入します。

挿入性能 挿入アロケーション数 挿入割り当てバイト数 小さい値への割り当て:

Insert Allocs small

#### Get 事前に値が格納されたデータ構造内で、N個の値をキーで検索する時間を測定します。タイミングを開始する前にすべての値がデータ構造に格納され、その後各値がキーで取得されます。

Get performance

#### Iterate ソート済みおよび非ソートの順序で、すべてのN個の値を反復処理する時間を測定します。 Ordered Iterate performance Unordered Iterate performance

#### 追加ベンチマーク 追加のベンチマークや詳細は bwarr-benchリポジトリで利用可能です。 さらに多くのメソッドが追加される予定であり、AMD64とARM64アーキテクチャ向けの別々のベンチマークも予定しています。

インストール

Go 1.22以降が必要です。

go get github.com/dronnix/bwarr

それからコード内でインポートします:

import "github.com/dronnix/bwarr"

使用法

基本例

package main

import ( "fmt"

"github.com/dronnix/bwarr" )

func main() { // Create a BWArr with an integer comparison function // The second parameter (10) is the initial capacity hint bwa := bwarr.New(func(a, b int64) int { return int(a - b) }, 10)

// Insert elements bwa.Insert(42) bwa.Insert(17) bwa.Insert(99) bwa.Insert(23) bwa.Insert(8)

fmt.Printf("Length: %d\n", bwa.Len()) // Output: Length: 5

// Get an element val, found := bwa.Get(42) if found { fmt.Printf("Found: %d\n", val) // Output: Found: 42 }

// Delete an element deleted, found := bwa.Delete(17) if found { fmt.Printf("Deleted: %d\n", deleted) // Output: Deleted: 17 }

// Iterate in ascending order fmt.Println("Elements in sorted order:") bwa.Ascend(func(item int64) bool { fmt.Printf(" %d\n", item) return true // return false to stop iteration early }) // Output: // 8 // 23 // 42 // 99 }

--- Tranlated By Open Ai Tx | Last indexed: 2026-07-08 ---