Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `boost::hash_combine` Menggunakan "Nombor Ajaib"?

Mengapakah `boost::hash_combine` Menggunakan "Nombor Ajaib"?

Susan Sarandon
Susan Sarandonasal
2024-11-16 16:56:03253semak imbas

Why Does `boost::hash_combine` Use a

Menyahmistikan Nombor Ajaib dalam rangsangan::hash_combine

Fungsi templat rangsangan::hash_combine menggabungkan benih cincang dengan objek untuk menjana nilai hash. Walaupun prosesnya bersifat deterministik, penggunaan pemalar ajaib telah menimbulkan persoalan tentang tujuannya.

Rasional Di Sebalik Pemalar

Pemalar ajaib, 0x9e3779b9, berasal daripada timbal balik nisbah emas. Nombor ini dipilih kerana ia menyediakan 32 bit rawak di mana setiap bit mempunyai kebarangkalian yang sama untuk menjadi 0 atau 1. Kemasukan pemalar ini memperkenalkan rawak dan membantu mengedarkan nilai cincang secara sama rata, menghalang pengelompokan dalam jadual cincang.

Benih Beralih

Selain pemalar ajaib, fungsi hash_combine juga menggabungkan versi anjakan benih lama. Ini memastikan bahawa walaupun nilai cincang objek mempunyai julat terhad, perbezaan antara nilai tersebar dengan cepat ke semua bit.

Dengan menggabungkan pemalar ajaib dan benih teralih, fungsi hash_combine mencipta fungsi cincang yang lebih berkesan yang meminimumkan perlanggaran dan meningkatkan prestasi jadual cincang.

Atas ialah kandungan terperinci Mengapakah `boost::hash_combine` Menggunakan "Nombor Ajaib"?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn