2016-09-05 8 views
5

क्या कोई सूत्र है जो 2 निर्देशांक (ए, बी) और (सी, डी) के लिए एक इंटीजर है, जहां ए, बी, सी, और डी सकारात्मक हैं? आदेश यहां कोई फर्क नहीं पड़ता है, इसलिए फॉर्मूला को (a, b), (c, d) और (c, d), (a, b) दिए जाने पर समान परिणाम देना चाहिए। प्रत्येक समन्वय बिंदु मामले में वास्तविक संख्याओं का क्रम ((a, b)(b, a) जैसा नहीं है)। गति यहां कुंजी है, सूत्र तेजी से होना चाहिए और ओ (1) जटिलता होनी चाहिए।2 निर्देशांक के लिए फास्ट हैश जहां ऑर्डर कोई फर्क नहीं पड़ता?

नोट - मैं अभी जो कर रहा हूं वह पाइथन की इमारत का उपयोग करके दो निर्देशांकों को क्रमबद्ध कर रहा है, और फिर उन्हें पायथन के अंतर्निहित शब्दकोश (इसलिए, अंतर्निर्मित हैशिंग) में चाबियों के रूप में उपयोग कर रहा है। मुझे ऐसा करने का एक तेज़ तरीका चाहिए ताकि मैं दो इंटीग्रेट्स को एक पूर्णांक में रख सकूं।

+0

क्या आपके पास अपने निर्देशांक के लिए अधिकतम मूल्य है? –

+0

नहीं, एक्स या वाई मानों पर दी गई सीमा नहीं है। –

+0

टक्कर के बारे में कोई आवश्यकता है? और हो सकता है कि आप उन्हें पाइथन सॉर्ट का उपयोग करने के बजाय मैन्युअल रूप से सॉर्ट कर सकें, जिसमें आपके जैसे छोटे सूचियों के लिए कुछ ओवरहेड है। –

उत्तर

3

आप इसके लिए frozenset के hash() का उपयोग कर सकते हैं।

>>> hash(frozenset([(10, 20), (11, 22)])) 
1735850283064117985 
>>> hash(frozenset([(11, 22), (10, 20)])) 
1735850283064117985 

Frozensets विशेष रूप से उपयोग के मामले में इस तरह के लिए डिजाइन किए गए थे (अर्थात frozensets आंतरिक रूप से अव्यवस्थित संग्रह है कि अपरिवर्तनीय और hashable हैं)।

आशा है कि यह उत्तर आपको जिस चीज की आवश्यकता है उसका अधिकार लेता है :-)

+1

ओह, मुझे जमे हुए सेट के बारे में पता नहीं था। धन्यवाद! –

संबंधित मुद्दे