पर भौतिक पहचान आधारित विकल्प मैं एक संरचित मूल्य का वर्णन करने वाली ग्राफ़विज़ फ़ाइल प्राप्त करने का प्रयास कर रहा हूं। यह नैदानिक उद्देश्यों के लिए है, इसलिए मैं चाहता हूं कि मेरा ग्राफ यथासंभव यथासंभव स्मृति में वास्तविक संरचना को दर्पण करे। मैं Graphviz कोने करने के लिए मान मैप करने के लिए इतना है कि मैं एक शीर्ष जब एक मूल्य के दो या अधिक भीतर का संदर्भ है पुन: उपयोग कर सकते हैं नीचे उपयोग कर रहा हूँ:Hashtbl.hash
let same = (==)
module StateIdentity : Hashtbl.HashedType = struct
type t = R.meta_t state
let hash = Hashtbl.hash
let equal = same
end
module StateHashtbl = Hashtbl.Make (StateIdentity)
Hashtbl.hash
के लिए दस्तावेज़ चलता है कि यह प्रयोग दोनों जब StateIdentity.equal = (=)
के लिए उपयुक्त है और जब StateIdentity.equal = (==)
लेकिन मैं यह सुनिश्चित करना चाहता हूं कि हैश तालिका का उपयोग संभवतः ओ (1) के करीब है, इसलिए Hashtbl.hash
प्रत्येक लुकअप पर ऑब्जेक्ट ग्राफ़ (इस मामले में संभावित रूप से बड़ा) नहीं चल रहा है।
मुझे पता है कि ओकम्ल चाल के आसपास संदर्भ हैं, लेकिन क्या ओकैम में संदर्भ संदर्भ के लिए ओ (1) प्रॉक्सी है?
Hashtable of mutable variable in Ocaml का उत्तर नहीं बताता है।
मैं राज्यों को सीरियल नंबर संलग्न करने के लिए नाराज हूं, क्योंकि यह नैदानिक कोड है इसलिए कोई भी त्रुटि जो मैं कर रहा हूं जिसमें अन्य बग मास्क करने की क्षमता है।
"हैशब्लॉक एचश के लिए प्रलेखन से पता चलता है कि यह राज्य Identity.equal = (=) और जब StateIdentity.equal = (==)" दोनों के लिए उपयुक्त है, तो यह नहीं है। 'Hashtbl.hash' में भौतिक समानता से जुड़े कई टकराव होते हैं, जिसका अर्थ है कि आप इसका उपयोग कर रहे थे, आपका हैशटेबल संरचनात्मक रूप से बराबर, शारीरिक रूप से अलग-अलग कुंजी की लंबी सूचियों की एक छोटी श्रृंखला में गिरावट हो सकता है। –
@ पास्कल क्यूक, काफी सही। "उपयुक्त" से मेरा मतलब था "प्रतिस्थापन को बनाए रखना और खोजना", और लुकअप निरंतर पर महत्वपूर्ण तुलना की संख्या को रखने का जिक्र नहीं कर रहा था। –