संपादित करें: इस जवाब में आदेशों के-विकास क्रम, एक संपीड़न एल्गोरिथ्म हो सकता है कि आप क्या चाहते सीएसई या मैट्रिक्स श्रृंखला गुणा चलाने के लिए
दिलचस्प बात यह है में स्वीकार किए जाते हैं जवाब के अलावा जरूरत है: एक संपीड़न एल्गोरिदम यह संपीड़न के आकार को कम करने की कोशिश करता है, और अगर ऐसा करने का एकमात्र तरीका प्रतिस्थापन है, तो आप इसका पता लगा सकते हैं और अपने एल्गोरिदम के लिए आवश्यक सबकंपोनेंट प्राप्त कर सकते हैं। हालांकि छोटे इनपुट के लिए यह अच्छा परिणाम नहीं दे सकता है।
ऐसे परिचालनों का चयन करने में आपके संचालन के कौन से सबसेट कम्यूटेटिव हैं, इस पर एक एल्गोरिदम चुनने में एक महत्वपूर्ण विचार होगा। [संपादित करें: ओ पी का कहना है कोई आपरेशन उसका/उसकी स्थिति में विनिमेय हैं],
हम भी सर्वोत्कृष्ट समाधान परिभाषित कर सकते हैं, तो हम इस तरह के कैशिंग के रूप में प्रभाव की अनदेखी:
input: [some product of matrices to compute]
given that multiplying two NxN matrices is O(N^2.376)
given we can visualize the product as follows:
[[AxB][BxC][CxD][DxE]...]
we must for example perform O(max(A,B,C)^2.376) or so operations in order to combine
[AxB][BxC] -> [AxC]
The max(...) is an estimate based on how fast it is to multiply two square matrices;
a better estimate of cost(A,B,C) for multiplying an AxB * BxC matrix can be gotten
from actually looking at the algorithm, or running benchmarks if you don't know the
algorithm used.
However note that multiplying the same matrix with itself, i.e. calculating
a power, can be much more efficient, and we also need to take that into account.
At worst, it takes log_2(power) multiplies each of O(N^2.376), but this could be
made more efficient by diagonalizing the matrix first.
है कि क्या एक लालची के बारे में सवाल ही नहीं है दृष्टिकोण इस के लिए व्यवहार्य नहीं है: क्या प्रत्येक को प्रत्येक चरण में दोहराने वाले सबस्ट्रिंग को संपीड़ित करना चाहिए। यह मामला नहीं हो सकता है, उदा।
aaaaabaab
compressing 'aa' results in ccabcb and compressing 'aab' is now impossible
हालांकि मैं एक कूबड़ है कि, अगर हम संपीड़ित करने सबस्ट्रिंग सभी आदेशों की कोशिश, हम शायद इस मुद्दे में भी अक्सर नहीं चलेंगे है।
इस प्रकार नीचे लिखा होने हम क्या चाहते हैं (लागत) और संभवतः माना मुद्दों, हम पहले से ही एक जानवर बल एल्गोरिथ्म जो ऐसा कर सकते हैं, और यह मैट्रिक्स की बहुत छोटी संख्या के लिए चलेंगे:
# pseudocode
def compress(problem, substring)
x = new Problem(problem)
x.string.replaceall(substring, newsymbol)
x.subcomputations += Subcomputation(newsymbol=substring)
def bestCompression(problem)
candidateCompressions = [compress(problem,substring) for each substring in problem.string]
# etc., recursively return problem with minimum cost
# dynamic programming may help make this more efficient, but one must watch
# out for the note above, how it may be hard to be greedy
नोट: Asgeir द्वारा एक और जवाब के अनुसार, यह मैट्रिक्स चेन गुणा अनुकूलन समस्या के रूप में जाना जाता है। निक फोर्टसेक्यू नोट्स को यह आमतौर पर http://en.wikipedia.org/wiki/Common_subexpression_elimination के रूप में भी जाना जाता है - इस प्रकार कोई भी साहित्य से कोई सामान्य सीएसई या मैट्रिक्स-चेन-गुणात्मक एल्गोरिदम/लाइब्रेरी पा सकता है, और प्लग ऑर्डर-ऑफ-आयाम में प्लग करता है जिसका मैंने पहले उल्लेख किया था (आप उन नामकों की आवश्यकता होगी जो आप उपयोग करते हैं)। ध्यान दें कि उपर्युक्त गणनाओं की लागत (गुणा, एक्सपोनिएशन, इत्यादि) मानते हैं कि उन्हें अत्याधुनिक एल्गोरिदम के साथ कुशलतापूर्वक किया जा रहा है; यदि यह मामला नहीं है, तो एक्सपोनेंट को उचित मूल्यों से प्रतिस्थापित करें जो संचालन के तरीके से मेल खाते हैं।
त्वरित प्रश्न - आप सिर्फ mutiplication उपयोग कर रहे हैं (इस स्थिति एक * ख में = बी * ए) या * एक मनमाना ऑपरेशन है, और यह उन सबस्ट्रिंग्स हैं जिनमें आप रुचि रखते हैं? –
ऑपरेटर वास्तव में मैट्रिक्स गुणांक –
हैं जो उन्हें गैर-कम्यूटिव बनाता है। लेकिन अभी भी सहयोगी या यह सवाल समझ में नहीं आता है। – phkahler