Saya mencari kelas struktur data Pohon yang bagus. Saya telah menemukan paket ini , tetapi karena saya relatif baru mengenal Python (bukan pemrograman), saya tidak tahu apakah ada yang lebih baik di luar sana.
Saya ingin mendengar dari Pythonistas di sini - apakah Anda memiliki skrip pohon favorit yang biasa Anda gunakan dan akan rekomendasikan?
[Sunting]
Untuk memperjelas, dengan 'Pohon', yang saya maksud adalah pohon tak beraturan sederhana (Hmm, itu sedikit definisi rekursif - tapi mudah-mudahan, itu menjelaskan banyak hal). Mengenai apa yang saya butuhkan pohon itu untuk (contoh kasus penggunaan). Saya membaca data pohon dari file datar dan saya perlu membangun pohon dari data dan melintasi semua node di pohon.
Jawaban:
Gulung milik Anda sendiri. Misalnya, cukup buat model pohon Anda sebagai daftar daftar. Anda harus merinci kebutuhan spesifik Anda sebelum orang dapat memberikan rekomendasi yang lebih baik.
Menanggapi pertanyaan HelloGoodbye, ini adalah kode contoh untuk iterasi pohon.
Salah satu tangkapannya adalah implementasi rekursif ini adalah O (n log n). Ini berfungsi dengan baik untuk semua pohon yang harus saya tangani. Mungkin subgenerator di Python 3 akan membantu.
sumber
Anda dapat membangun pohon penis yang bagus seperti ini:
Ini mungkin tidak persis seperti yang Anda inginkan tetapi ini cukup berguna! Nilai disimpan hanya di simpul daun. Berikut adalah contoh cara kerjanya:
Untuk informasi lebih lanjut, lihat intinya .
sumber
Saya menemukan modul yang ditulis oleh Brett Alistair Kromkamp yang belum selesai. Saya menyelesaikannya dan mempublikasikannya di github dan menamainya sebagai
treelib
(aslipyTree
):https://github.com/caesar0301/treelib
Semoga itu membantu Anda ....
sumber
Membangun jawaban yang diberikan di atas dengan Pohon baris tunggal menggunakan defaultdict , Anda dapat menjadikannya sebuah kelas. Ini akan memungkinkan Anda untuk mengatur default dalam konstruktor dan membangunnya dengan cara lain.
Contoh ini memungkinkan Anda membuat referensi kembali sehingga setiap node dapat merujuk ke induknya di pohon.
Selanjutnya, Anda bahkan dapat mengganti __setattr__ pada pohon kelas sehingga saat menugaskan ulang induk, itu menghapusnya sebagai anak dari induk itu. Banyak hal keren dengan pola ini.
sumber
Untuk pohon dengan anak-anak yang teratur, saya biasanya melakukan sesuatu seperti ini (meskipun sedikit kurang umum, disesuaikan dengan apa yang saya lakukan):
Anda dapat melakukan sesuatu yang sebanding dengan a
dict
atau menggunakanDictMixin
atau itu keturunan yang lebih modern jika Anda ingin anak-anak yang tidak berurutan diakses dengan kunci.sumber
Mungkin ada baiknya menulis pembungkus pohon Anda sendiri berdasarkan grafik berarah asiklik menggunakan pustaka networkx .
sumber
Ini sesuatu yang sedang saya kerjakan.
Gunakan seperti itu (angka digunakan sebagai nilai contoh):
t = Tree(1, Tree(2, Tree(4)), Tree(3, Tree(5)))
sumber
Akankah BTrees membantu? Mereka adalah bagian dari kode Database Objek Zope. Mengunduh seluruh paket ZODB agak berlebihan, tapi saya harap modul BTrees setidaknya bisa dipisahkan.
sumber
Saya rasa, dari pengalaman saya sendiri tentang masalah dengan struktur data yang lebih canggih, hal terpenting yang dapat Anda lakukan di sini adalah mendapatkan pengetahuan yang baik tentang konsep umum pohon sebagai struktur data. Jika Anda memahami mekanisme dasar di balik konsep tersebut, maka akan cukup mudah untuk menerapkan solusi yang sesuai dengan masalah Anda. Ada banyak sumber bagus di luar sana yang menjelaskan konsep tersebut. Apa yang "menyelamatkan" saya bertahun-tahun yang lalu tentang masalah khusus ini adalah bagian 2.3 dalam "Seni Pemrograman Komputer".
sumber