2010-08-22 10 views
6

यदि मेरे पास टैग का एक सेट है (< 100), और ऑब्जेक्ट्स का एक सेट (~ 25000), जहां प्रत्येक ऑब्जेक्ट में टैग के कुछ उप-सेट होते हैं, तो क्या आप किसी मौजूदा डेटा-स्ट्रक्चर के बारे में जानते हैं जो तेजी से अनुमति देगा उन वस्तुओं की पुनर्प्राप्ति जो टैग के कुछ बूलियन फ़ंक्शन को संतुष्ट करती हैं?डेटा संरचना गति-स्मृति टैग की गई ऑब्जेक्ट खोज में गति?

टैग और ऑब्जेक्ट्स को जोड़ना/हटाना विशेष रूप से तेज़ नहीं होना चाहिए, लेकिन उन ऑब्जेक्ट्स का चयन जो टैग्स के साथ बूलियन फ़ंक्शन को संतुष्ट करते हैं, होना चाहिए।

अब जब मैंने अपना प्रश्न नीचे लिखा है, ऐसा लगता है कि मैं एक मेमोरी डेटाबेस का वर्णन कर रहा हूं, लेकिन मूल रूप से मैं उन वस्तुओं के लिए संरचना जैसे कुछ बाइनरी पेड़ के बारे में सोच रहा था, जहां प्रत्येक शाखा के लिए बाईं ओर लेना/दाएं शाखा कुछ टैग के पास/निर्धारित करने का निर्णय लेने के बराबर होगी। लेकिन वह डॉन-केयर टैग की अनुमति नहीं देगा? मैं पूछ रहा हूं क्योंकि मुझे आश्चर्य हुआ कि यह पहले किया गया है और डेटा संरचनाओं के लिए Google को मुश्किल करना मुश्किल लगता है।

  • अग्रिम धन्यवाद - धान।
+0

मुझे लगता है कि यहां जवाब: http://stackoverflow.com/questions/3538322/many-to-many-data-structure-in-python एक इन-मेमोरी डीबी का उपयोग करना है। – Paddy3118

+0

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

+0

हाय dirkgently, समारोह उपयोगकर्ता इनपुट पर आधारित होगा, और परियोजना में जल्द ही आकलन करना मुश्किल होगा, लेकिन क्योंकि यह शुरुआती है - मैं विकल्पों का पता लगाना चाहता हूं। धन्यवाद। – Paddy3118

उत्तर

6

यहां एक सुझाव दिया गया है: प्रत्येक टैग के लिए बिट-सरणी का उपयोग करें, जिसमें ऑब्जेक्ट्स के रूप में कई तत्व हैं; प्रत्येक सूचकांक एक वस्तु का प्रतिनिधित्व करता है। प्रत्येक इंडेक्स पर मान 1 है यदि उस ऑब्जेक्ट में वह टैग है।

टैग पर बूलियन फ़ंक्शंस तब इस बिट-सरणी पर तेज़ सेट ऑपरेशन होते हैं। और परिणामी बिट-सरणी आपको दस्तावेज देता है जो मानदंडों को पूरा करता है।

यह बहुत कुशल नहीं है अगर टैग या ऑब्जेक्ट्स अक्सर बदलते रहते हैं लेकिन शायद आपके लिए लागू होते हैं।

+0

दोह, बेशक! धन्यवाद। – Paddy3118

+0

@ paddy3118 खुशी है कि आप इसे उपयोगी पाते हैं। –

+1

एकेए बिटमैप इंडेक्स: https://en.wikipedia.org/wiki/Bitmap_index –

0

आपको कितनी तेजी से आवश्यकता होगी? आप कितने जटिल काम करते हैं यानी एक सामान्य कार्य में कितने टैग का उपयोग किया जाता है?

मेमोरी SQL डेटाबेस में कुछ का उपयोग करने के बारे में कैसे? फिर आप सरल चयन क्वेरी के साथ बुलियन फ़ंक्शन व्यक्त कर सकते हैं।

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