Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `boost::hash_combine` Menggunakan "Nombor Ajaib"?
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!