मैंने फाइलों की समानता निर्धारित करने से संबंधित कुछ प्रश्न यहां देखे हैं, लेकिन वे सभी किसी विशेष डोमेन (छवियों, ध्वनियों, टेक्स्ट इत्यादि) से जुड़े हुए हैं। समाधान के रूप में पेश की जाने वाली तकनीकों की तुलना की जा रही फ़ाइलों के अंतर्निहित फ़ाइल प्रारूप के ज्ञान की आवश्यकता होती है। जो मैं खोज रहा हूं वह इस आवश्यकता के बिना एक विधि है, जहां मनमाने ढंग से बाइनरी फ़ाइलों की तुलना किए बिना तुलना की जा सकती है कि उन्हें किस प्रकार का डेटा शामिल है। यही है, मैं दो फाइलों के बाइनरी डेटा के समानता प्रतिशत को निर्धारित करने के लिए देख रहा हूं।बाइनरी डेटा समानता की गणना
आपके साथ काम करने के लिए थोड़ा और विवरण देने के लिए, भले ही यह कई चीजों पर संभावित रूप से लागू हो, मेरे पास एक विशिष्ट समस्या है जिस पर मैं काम कर रहा हूं। मेरे पास वर्तमान में एक कामकाजी समाधान है, लेकिन मुझे नहीं लगता कि यह आदर्श है। तुलनात्मक विधि के संदर्भ में शायद कई अनुकूलन हैं, और परिणाम संग्रहित कर रहे हैं। उम्मीद है कि यहां कुछ लोग मुझे कुछ नए विचार देने में सक्षम होंगे। मैं शायद कुछ दिनों के बाद अपनी वर्तमान विधि के बारे में कुछ जानकारी में संपादित करूंगा, लेकिन मैं आपको यह बताकर समस्या के बारे में लोगों के विचारों को पूर्वाग्रह नहीं करना चाहता हूं कि मैं इसे पहले से कैसे कर रहा हूं।
जिस समस्या पर मैं काम कर रहा हूं वह वीडियो गेम रोम छवियों के लिए क्लोन डिटेक्शन है। उन लोगों के लिए जिनके पास अनुकरण के साथ अनुभव नहीं है, रोम गेम कारतूस पर डेटा के डंप हैं। एक रॉम "क्लोन" आमतौर पर एक ही गेम का एक संशोधित संस्करण है, सबसे आम प्रकार एक अनुवादित संस्करण है। उदाहरण के लिए, मूल के जापानी और अंग्रेजी संस्करण एनईएस के लिए अंतिम काल्पनिक क्लोन हैं। गेम लगभग सभी संपत्तियों (sprites, संगीत, आदि) साझा करते हैं, लेकिन पाठ का अनुवाद किया गया है।
वर्तमान में कई समूह हैं जो विभिन्न प्रणालियों के लिए क्लोन की सूचियों को बनाए रखने पर काम करते हैं, लेकिन जहां तक मैं कह सकता हूं, यह सब मैन्युअल रूप से किया जाता है। मैं जो करने का प्रयास कर रहा हूं वह समान रोम की छवियों को स्वचालित रूप से और निष्पक्ष रूप से पहचानने का तरीका ढूंढता है, "ये एक ही गेम की तरह लगते हैं" की बजाय डेटा समानता के आधार पर। क्लोन का पता लगाने के कई कारण हैं, लेकिन Solid compression के साथ प्रमुख प्रेरणा का उपयोग किया जाना है। यह सभी गेम क्लोनों को एक ही संग्रह में संपीड़ित करने की अनुमति देता है, पूरे संपीड़ित क्लोन सेट अक्सर व्यक्तिगत रोम में से एक की तुलना में केवल थोड़ी अधिक जगह लेते हैं।
कुछ चिंताएं विचार करने के लिए जब संभावित दृष्टिकोण के साथ आ:
- रोम सिस्टम के आधार पर, आकार में अत्यधिक भिन्नता है। कुछ छोटे होते हैं, लेकिन आधुनिक प्रणालियों में बड़े, 256 एमबी या अधिक हो सकते हैं। कुछ (सभी?) प्रणालियों में केवल 2 आकारों की शक्तियां होती हैं, इन प्रणालियों में से एक पर 130 एमबी गेम में 256 एमबी रोम होगा, जो काफी हद तक खाली होगा। ध्यान दें कि इसके कारण, कुछ क्लोनों में जंगली रूप से भिन्न आकार हो सकते हैं, यदि कोई गेम संस्करण थ्रेसहोल्ड को पार करता है और उसे एक कारतूस का उपयोग करना होता है जो आकार के दोगुना होता है।
- वर्तमान में कई प्रणालियों पर हजारों ज्ञात रोम हैं, जिनमें अधिकांश सिस्टम अभी भी लगातार जारी किए जाते हैं। यहां तक कि पुराने सिस्टम के लिए, एक प्रमुख रोम-हैकिंग समुदाय है जो अक्सर संशोधित रोम उत्पन्न करता है।
- रोम की हर संभव जोड़ी के लिए समानता डेटा संग्रहीत करने के परिणामस्वरूप किसी भी लोकप्रिय प्रणाली के लिए डेटा की लाखों पंक्तियां होंगी। 5000 रोम वाले सिस्टम को समानता डेटा की 25 मिलियन पंक्तियों की आवश्यकता होगी, जिसमें एक नया गेम 5000 पंक्तियों को जोड़ देगा।
- प्रसंस्करण का राज्य पुनर्प्राप्त करने योग्य होना चाहिए, ताकि यदि यह बाधित हो तो यह इसे छोड़कर उठा सकता है। किसी भी विधि के साथ, बहुत सारी प्रोसेसिंग की आवश्यकता होगी, और यह मानते हुए कि एक चीज में पूरी चीज चलनी सुरक्षित नहीं है।
- किसी भी समय नए रोम जोड़े जा सकते हैं, इसलिए विधि को यह नहीं मानना चाहिए कि इसमें पहले से ही "पूर्ण" सेट है।यही है, यहां तक कि जब आप पहले से ही सभी मौजूदा रोम के लिए समानता का पता लगा चुके हैं, तो एक नया जोड़ा गया है (और यह भी पिछली प्रसंस्करण पूरी तरह से समाप्त होने से पहले भी हो सकता है) यह निर्धारित करने के लिए सभी पिछले लोगों की तुलना करने के लिए एक विधि होनी चाहिए जो (अगर कोई है) यह एक क्लोन है।
- उच्च प्रसंस्करण गति सटीकता (एक बिंदु पर) पर प्राथमिकता दी जानी चाहिए। यह जानकर कि क्या दो रोम 94% या 96% समान हैं, विशेष रूप से महत्वपूर्ण नहीं है, लेकिन अगर किसी नए रोम की तुलना करने के लिए प्रसंस्करण का दिन पिछले सभी लोगों के लिए होता है, तो प्रोग्राम संभवतः कभी पूरा नहीं होगा।
काम करने के लिए यह एक दिलचस्प समस्या रही है, मैं यह देखने के लिए उत्सुक हूं कि अन्य लोग क्या कर सकते हैं। यदि आप कोई और विवरण चाहते हैं तो मुझे टिप्पणियों में बताएं, और मैं उन्हें आपूर्ति करने की कोशिश करूंगा।
हाय, मैं एक बहुत ही इसी तरह की समस्या पर काम कर रहा हूँ और मुझे पता है कि क्या विधि आप अंत में इस्तेमाल अच्छा लगेगा? – jl6