मेरे पास सेट का संग्रह है जिसे मैं trie में रखना चाहता हूं।सेट की संपीड़न के लिए एल्गोरिदम
सामान्य प्रयास तत्वों के तारों से बने होते हैं - अर्थात, तत्वों का क्रम महत्वपूर्ण है। सेट में परिभाषित आदेश की कमी है, इसलिए अधिक संपीड़न की संभावना है।
उदाहरण के लिए, तार "abc"
, "bc"
दिया, और "c"
, मैं trie बनाएंगे:
(*,3) -> ('a',1) -> ('b',1) -> ('c',1)
-> ('b',1) -> ('c',1)
-> ('c',1)
लेकिन सेट { 'a', 'b', 'c' }
, { 'b', 'c' }
, { 'c' }
को देखते हुए, मैं ऊपर trie बना सकते हैं, या किसी इन ग्यारह में:
(*,3) -> ('a',1) -> ('b',1) -> ('c',1)
-> ('c',2) -> ('a',1)
(*,3) -> ('a',1) -> ('c',1) -> ('b',1)
-> ('b',1) -> ('c',1)
-> ('c',1)
(*,3) -> ('a',1) -> ('c',1) -> ('b',1)
-> ('c',2) -> ('a',1)
(*,3) -> ('b',2) -> ('a',1) -> ('c',1)
-> ('c',1)
-> ('c',1)
(*,3) -> ('b',1) -> ('a',1) -> ('c',1)
-> ('c',2) -> ('b',1)
(*,3) -> ('b',2) -> ('c',2) -> ('a',1)
-> ('c',1)
(*,3) -> ('b',1) -> ('c',1) -> ('a',1)
-> ('c',2) -> ('b',1)
(*,3) -> ('c',2) -> ('a',1) -> ('b',1)
-> ('b',1) -> ('c',1)
(*,3) -> ('c',2) -> ('a',1) -> ('b',1)
-> ('b',1)
(*,3) -> ('c',2) -> ('b',1) -> ('a',1)
-> ('b',1) -> ('c',1)
(*,3) -> ('c',3) -> ('b',2) -> ('a',1)
तो स्पष्ट रूप से संपीड़न के लिए कमरा (7 नोड्स 4) है।
I संदिग्ध अपने बच्चों की सापेक्ष आवृत्ति पर निर्भर प्रत्येक नोड पर स्थानीय आदेश को परिभाषित करने से यह होगा, लेकिन मुझे यकीन नहीं है, और यह अत्यधिक महंगा हो सकता है।
तो इससे पहले कि मैंने व्हाइटबोर्ड मारा, और अपने स्वयं के संपीड़न एल्गोरिदम पर क्रैकिंग शुरू कर दिया, क्या कोई मौजूदा है? यह कितना महंगा है? क्या यह एक थोक प्रक्रिया है, या इसे प्रति-सम्मिलित/हटाया जा सकता है?
मुझे लगता है कि ट्राई सेट का प्रतिनिधित्व करने के लिए एक बहुत अच्छी संरचना नहीं है। बिट सरणी का संग्रह बेहतर नहीं होगा? आप क्या संचालन करने की उम्मीद कर रहे हैं?आप स्मृति के बारे में चिंता क्यों करते हैं? – svick
@ एसविक: शायद, लेकिन मेरे सेट तत्वों के एक बड़े ब्रह्मांड से चित्रित कर रहे हैं, इसलिए थोड़ा सरणी बहुत कुशल नहीं हो सकता है। (सबसेट, आवृत्ति) जोड़े के माध्यम से Iterate। क्योंकि मेरे पास बहुत सारे डेटा हैं। – rampion
आप क्या संचालन करना चाहते हैं? एक पारंपरिक त्रिभुज कुशलता से आपको बता सकता है कि दिए गए स्ट्रिंग को स्ट्रिंग्स के सेट में शामिल किया गया है या नहीं। यदि आपका ट्राई संरचना के आकार को कम करने के लिए अपने तारों को फिर से ऑर्डर करता है, तो आप वास्तव में परीक्षण कैसे कर सकते हैं कि त्रिभुज में वर्णों का एक निर्धारित सेट निहित है या नहीं? ऐसा लगता है कि आपको हर क्रमपरिवर्तन की खोज करने की आवश्यकता होगी। – Weeble