2009-10-02 14 views
23

मैं शब्द दस्तावेज़ को लागू करना चाहता हूं, यह लागू करने के लिए क्या एल्गोरिदम की आवश्यकता है?दस्तावेज diff एल्गोरिदम कैसे काम करते हैं?

+1

क्या आप इसे * शो * मतभेद, या * स्टोर * अंतर को एक इष्टतम तरीके से उपयोग करेंगे? –

उत्तर

3

LCS में से अधिकांश का अनुकूलन समाधान O(ND) Myer 's algorithm है, और यहाँ एक एल्गोरिथम दृष्टिकोण है जो मैं अलग कार्यालय 2007 दस्तावेजों को लागू करने के लिए प्रयोग किया जाता था। Link to algorithm paper

+4

पेपर लिंक काम नहीं करता .. –

+2

यह मेरे लिए काम कर रहा है: http://www.xmailserver.org/diff2.pdf – Zamicol

15

एक अंतर अनिवार्य रूप से a solutionlongest common sub-sequence problem पर है।

इष्टतम समाधान के लिए dynamic programming का ज्ञान आवश्यक है, इसलिए यह हल करने के लिए एक काफी जटिल समस्या है।

हालांकि, यह प्रत्यय-पेड़ का निर्माण करके भी किया जा सकता है। दोनों एल्गोरिदम here रेखांकित हैं।

+1

आमतौर पर जब आप अपने दस्तावेज़ को अक्षर या बाइट्स की धारा मानते हैं।यहां प्रश्न शब्द दस्तावेज़ के बारे में है। इस तरह के एक एल्गोरिदम को लागू करने से पहले आपको अपने आप से पूछना होगा कि नीला 8pt वर्डाना में 'हैलो वर्ल्ड' है, लाल 10pt एरियल आदि में 'हैलो वर्ल्ड' जैसा ही है। – quosoo

+1

हां, जाहिर है कि मूल एल्गोरिदम को ऐसे तर्कों के लिए अतिरिक्त तर्क की आवश्यकता होगी मतभेद, लेकिन एल्गोरिदम का मूल अभी भी वही होगा। –

2

जैसा कि बेन एस इंगित करता है, आम तौर पर सबसे लंबी आम उप-अनुक्रम समस्या को हल करके differencing समस्या को संबोधित किया जा सकता है। अधिक विशेष रूप से, Hunt-McIlroy algorithm क्लासिक एल्गोरिदम में से एक है जो समस्या पर लागू किया गया है (उदाहरण के लिए यूनिक्स 'diff उपयोगिता के कार्यान्वयन में)।

28

ठीक है, आमतौर पर diff 'आईएनजी आमतौर पर Longest common subsequence problem द्वारा हल किया जाता है। इसके अलावा Diff पर "विकिपीडिया लेख के Algorithm" खंड देखें:।

diff के संचालन सबसे लंबे समय तक आम subsequence समस्या

इस समस्या में सुलझाने पर आधारित है, तो आप आइटम के दो दृश्यों है :

a b c d f g h j q z 

    a b c d e f g i j k r x y z 

और आप आइटम की सबसे लंबी अनुक्रम कि बॉट में मौजूद है पता लगाना चाहते हैं एच क्रम में एच मूल अनुक्रम। यही है, आप अनुक्रम प्राप्त करना चाहते हैं जिसे से आइटमों को हटाकर पहले अनुक्रम से प्राप्त किया जा सकता है, और दूसरे अनुक्रम से अन्य आइटमों को हटाकर प्राप्त किया जा सकता है। आप भी इस अनुक्रम को तक संभव बनाना चाहते हैं। इस मामले में यह

a b c d f g j z 
सबसे लंबे समय तक आम subsequence यह diff की तरह उत्पादन प्राप्त करने के लिए केवल एक छोटा सा कदम है से

है:

e h i q k r x y 
    + - + - + + + + 

जिसके अनुसार, यह सब आधारित पाठ के साथ ठीक काम करता है दस्तावेजों। चूंकि वर्ड डॉक्यूमेंट्स बाइनरी प्रारूप में प्रभावी ढंग से प्रभावी होते हैं, और इसमें कई प्रारूपण जानकारी और डेटा शामिल होते हैं, यह अधिक जटिल होगा। आदर्श रूप में, आप के रूप में यह क्षमता के लिए दस्तावेजों के बीच "अंतर" के रूप में यहाँ विस्तृत ही वचन को स्वचालित पर गौर कर सकता,:

Microsoft Word Tip: How to compare two documents for differences

+0

एक diff एल्गोरिदम कार्यान्वयन के दो उद्देश्य हैं: संस्करणों के बीच केवल अंतर को स्टोर करने के लिए, या संस्करणों के बीच अंतर दिखाने के लिए। ये बहुत अलग हैं (कोई इरादा नहीं है)। एलसीएस आम तौर पर अंतर दिखाने के लिए प्रयोग योग्य है, लेकिन इष्टतम भंडारण के लिए, अधिक उन्नत एल्गोरिदम की आवश्यकता होती है। उदाहरण के लिए, यदि आप दस्तावेज़ के एक सेक्शन से एक बड़ा हिस्सा काटते हैं, और इसे किसी अन्य सेक्शन में पेस्ट करते हैं, तो एक अच्छा स्टोरेज एल्गोरिदम इसका पता लगाएगा और इसे स्टोर नहीं करेगा "अरे, बहुत सारे नए डेटा यहां दिखाई दिए हैं"। –

+2

@Lasse - सहमत। चूंकि मूल प्रश्न पूछताछ शब्द दस्तावेज़ों के बारे में बात कर रहा था, इसलिए मुझे लगता है कि वे भंडारण पक्ष की बजाय भिन्नता के "दृश्य" पक्ष में अधिक रुचि रखते हैं। हालांकि, आप स्टोरेज साइड के लिए उसमें सही हैं, आप डेल्टा एन्कोडिंग/संपीड़न (http://en.wikipedia.org/wiki/Delta_encoding) आदि में देख रहे होंगे – CraigTP

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