कई डीवीडी पर फ़ाइलों को वितरित करने के लिए उपयोगिता?


11

मेरे पास मीडिया फ़ाइलों का एक गुच्छा है, जिसे मैं डीवीडी में रिकॉर्ड करना चाहता हूं, लेकिन चूंकि प्रत्येक डीवीडी केवल 4.5GB फिट बैठता है, मुझे डीवीडी की न्यूनतम संख्या का उपयोग करने के लिए फ़ाइलों को व्यवस्थित करने का इष्टतम तरीका खोजना होगा (अन्यथा प्रत्येक में खाली जगह बची है। डीवीडी आसानी से जोड़ सकते हैं)। क्या इसमें मदद करने के लिए कोई उपकरण हैं?

कई साल पहले फ्लॉपी डिस्क के साथ ऐसा करने के लिए एक डॉस उपयोगिता थी।


1
नहीं, मैं संपीड़न और विभाजन के लिए नहीं देख रहा हूँ। मैं फ़ाइलों को मूल रूप से वितरित करना चाहता हूं (फाइलसिस्टम) ताकि प्रत्येक डिस्क को सीधे इस्तेमाल किया जा सके।
एलेक्स आर

बस लगा कि यह खोज करने वाले किसी व्यक्ति के लिए एक अच्छा पृष्ठ है: Howtogeek.com/76264/…
Nav

जवाबों:


3

मुफ्त डीवीडी स्पैन आज़माएं :

DVD Span बड़े फ़ोल्डर की सामग्री को कई डीवीडी में लिखने के लिए एक बैकअप उपकरण है। न्यूनतम डिस्क पर डेटा की अधिकतम मात्रा को फिट करने के लिए डीवीडी स्पैन प्रत्येक डिस्क के सर्वश्रेष्ठ संगठन को स्वचालित रूप से निर्धारित कर सकता है। DVDSpan आपके संगीत संग्रह, फ़ोटो, या यहां तक ​​कि आपकी संपूर्ण हार्ड डिस्क को DVD में बैकअप करने के लिए एक बढ़िया उपकरण है। और क्योंकि यह नियमित डीवीडी (या सीडी) का उत्पादन करता है, इसलिए आपके बैकअप को पढ़ने या पुनर्स्थापित करने के लिए कोई विशेष सॉफ्टवेयर की आवश्यकता नहीं है।


2

आह, द नैकपैक समस्या । मैं इसके लिए केवल एक ऑनलाइन सॉल्वर ढूंढ सकता था, यहां । आपके नैकस्पैक का आकार 4.5GB होगा, और प्रत्येक पैकेट आपकी फ़ाइल का आकार होगा। आपको अपने विशेष एप्लिकेशन को फिट करने के लिए इसके आउटपुट की थोड़ी मालिश करने की आवश्यकता होगी, लेकिन यह व्यावहारिक होना चाहिए। यह बहुत तेजी से नहीं चलेगा, क्योंकि यह समस्या कठिन है


हां वास्तव में यह एक एनपी-पूर्ण समस्या है, लेकिन इस व्यावहारिक अनुप्रयोग के लिए, एक जानवर बल समाधान काफी तेज है :)
एलेक्स आर

1
यह नैकपैक समस्या के बराबर नहीं है, लेकिन (1-डी) बिन पैकिंग समस्या है , जिसमें से एक सटीक एल्गोरिदम है
केनी एविट

2

अवलोकन

जेफ शटॉक का जवाब सही है कि यह एक दहनशील अनुकूलन समस्या के समतुल्य (या आइसोमॉर्फिक है, जैसा कि गणितज्ञ लिखते हैं), लेकिन यह 1-आयामी बिन पैकिंग समस्या के बराबर है , न कि नैकपैक समस्या

आपके लिए भाग्यशाली, मेरे पास साझा करने के लिए कुछ कोड हैं जो आपके लिए, या किसी और के लिए इस समस्या को हल करेंगे, स्थापित .NET फ्रेमवर्क के कम से कम संस्करण 3.5 के साथ विंडोज कंप्यूटर तक पहुंच।

किसी न किसी समाधान

  1. सबसे पहले LINQPad को डाउनलोड और इंस्टॉल करें

  2. दूसरा, लिनक्यूपैड क्वेरी डाउनलोड करें जिसे मैंने लिखा था - यहां कच्ची फ़ाइल में लाइनक (हा) है। इसे एक .linq फ़ाइल के रूप में सहेजें और LINQPad में खोलें।

  3. पैरामीटर बदलें:

    यहाँ LINQPad क्वेरी कोड में वह हिस्सा है जिसे आपको बदलना चाहिए:

    int binSizeMb = 4476; // This is the (floor of the) total size of a DVD+R reported by CDBurnerXP. string rootFileFolderPath = @"F:\2006 - Polyester Pimpstrap Intergalactic Extravaganza multicam";

    binSizeMbअपने 'बिन' के आकार में परिवर्तन करें, जैसे सीडी, डीवीडी, पूर्व। int binSizeMb = 650;एक सीडी के लिए।

    नोट - binSizeMbमान की व्याख्या की जाती है, जिसे कभी-कभी मेइबाइट के रूप में जाना जाता है । मेरे बचपन के विपरीत, जब सभी बाइट गुणक 'बाइनरी' थे, तो कभी-कभी 'एमबी' अब एक 'दशमलव मेगाबाइट' या बिल्कुल 1,000,000 बाइट्स का उल्लेख करता है, जैसा कि एक मेबिबाइट (MiB) के 1,048,576 बाइट्स के विपरीत है, जो मेरे कोड में उपयोग किया जाता है । यदि आप इसे बदलना चाहते हैं, const int bytesPerMb = 1048576;तो कोड को लाइन में बदल दें const int bytesPerMb = 1000000;

    rootFileFolderPathफ़ोल्डर की पूर्ण पथ को बदलें जिसमें आप 'डिब्बे में पैक' करना चाहते हैं, उदा। string rootFileFolderPath = @"C:\MySecretBinFilesFolder";

  4. क्वेरी को या तो दबाकर F5या क्वेरी टैब के शीर्ष पर स्थित निष्पादित बटन पर क्लिक करके चलाएँ

परिणाम

क्वेरी कोड rootFileFolderPathफ़ोल्डर में सभी फ़ाइलों की पुनरावृत्ति करेगा, पुनरावर्ती रूप से, इसका अर्थ है कि सभी सबफ़ोल्डर्स में भी फ़ाइलें शामिल होंगी।

फिर यह फाइलों के लिए 'डिब्बे' बनाएगा, ताकि प्रत्येक बिन में सभी फाइलों का कुल आकार निर्दिष्ट बिन आकार से कम या बराबर हो।

LINQPad परिणाम फलक में आपको दो सूचियाँ दिखाई देंगी।

पहली सूची उन सभी फाइलों की है जिन्हें आकार में घटते क्रम में सूचीबद्ध किया गया है।

दूसरी सूची 'फाइलों की पैकिंग' द्वारा बनाई गई डिब्बे है, फाइलों और उनके आकारों की सूची के साथ-साथ बिन के शेष आकार के साथ।

यहां एक स्क्रीनशॉट है जिसमें दूसरी सूची और पहले दो डिब्बे बनाए गए हैं:

LINQPad स्क्रीनशॉट डिब्बे की सूची दिखा रहा है

Cursory विश्लेषण

विकीपीडिया के अनुसार, मैंने जो एल्गोरिथ्म का उपयोग किया है - फर्स्ट फिट डिसचार्जिंग (एफएफडी) रणनीति - बहुत बुरा नहीं होना चाहिए; विकिपीडिया राज्यों:

2007 में, यह साबित हुआ कि एफएफडी के लिए बाध्य 11/9 ऑप्ट + 6/9 तंग है।

'ऑप्ट' का तात्पर्य इष्टतम रणनीति से है (जैसा कि संभावित रूप से अगम्य है, किसी विशेष वास्तविक रणनीति से नहीं)।

इसमें शामिल गणितीय शब्दों की मेरी कुछ अस्पष्ट यादों के आधार पर, इसका मतलब यह होना चाहिए कि एफएफडी रणनीति को कम से कम, आइटम को ~ 1.22 गुना की संख्या में पैक करना चाहिए जो कि एक इष्टतम रणनीति होगी। इसलिए, यह रणनीति 4. के बजाय 5 बिन्स में आइटम पैक कर सकती है। मुझे संदेह है कि यह प्रदर्शन विशिष्ट 'पैथोलॉजिकल' आइटम आकारों को छोड़कर इष्टतम के बहुत करीब होने की संभावना है।

वही विकिपीडिया लेख यह भी बताता है कि एक "सटीक एल्गोरिदम" है । मैं इसे भी लागू करने का निर्णय ले सकता हूं। मुझे उस पेपर को पढ़ना होगा जो पहले एल्गोरिथम का वर्णन करता है।


0

आप किसी भी संपीड़न उपकरण का उपयोग कर सकते हैं जो एक संग्रह को विभाजित करने की अनुमति देता है जो मुझे लगता है


1
संपीड़न वह नहीं है जिसकी मुझे तलाश है। यह फ़ाइलों तक पहुँचने के लिए बहुत बोझिल बनाता है।
एलेक्स आर

0

आप कार्यक्रम के किसी एक संस्करण को हिचिकेलर के गाइड हास्केल में ले जा सकते हैं , शायद उस ट्यूटोरियल के कुछ हिस्से के माध्यम से काम करने के बाद; ट्यूटोरियल को कई डिस्क पर चीजों को वितरित करने की पूरी तरह से आपकी समस्या को हल करने के आसपास लिखा गया है, जिसके द्वारा समाधान को नियमित रूप से परिष्कृत किया जाता है, जैसा कि ट्यूटोरियल के अध्याय 3 से निम्न मार्ग द्वारा अनुकरण किया गया है :

पहले से ही पर्याप्त हैं। चलो कुछ सीडी पैक करते हैं।

जैसा कि आप पहले ही पहचान चुके होंगे, हमारी समस्या एक शास्त्रीय है। यह एक कहा जाता है "नेप्सेक समस्या" ( यह गूगल , यदि आप नहीं जानते कि यह पहले से ही क्या है। एक से अधिक 100000 लिंक मौजूद नहीं है)।

आइए लालची समाधान से शुरू करें ...

अधिक विचार: एक संबंधित प्रश्न

यहां एक समान प्रश्न है (हालांकि ऐसा नहीं है: यह वहां अनुकूलन के लिए नहीं पूछा जा रहा है), जहां आपको अपने कार्य के लिए अधिक उपयोगी समाधान / कार्यक्रम मिल सकते हैं (यदि वे पोस्ट किए जाएंगे):

  • https://unix.stackexchange.com/q/10158/4319 - "निर्दिष्ट निर्देशिका आकार में बड़ी निर्देशिका पेड़ को विभाजित करना?"

सुझाए गए ट्यूटोरियल में प्रोग्रामिंग को समझने के लिए कुछ संकेत

सामान्य तौर पर, हास्केल कोड काफी अभिव्यंजक है (क्योंकि हास्केल उच्च स्तर पर प्रोग्रामिंग के लिए एक भाषा है), और इसलिए इसे आसानी से समझा जा सकता है।

जब किसी एक समाधान के कोड को देखते हैं, तो याद रखें कि जिस प्रोग्राम को हम लिखना चाहते हैं उसकी शीर्ष-स्तरीय संरचना काफी सरल है, जैसा कि ट्यूटोरियल के अध्याय 1 में रखा गया है :

अब आइए एक पल के लिए सोचें कि हमारा कार्यक्रम कैसे संचालित होगा और इसे छद्मकोड में व्यक्त करेंगे:

main = Read list of directories and their sizes.
       Decide how to fit them on CD-Rs.
       Print solution.

उचित लगता है? मुझे ऐसा लगा।

आइए अपने जीवन को थोड़ा सरल करें और अभी के लिए मान लें कि हम अपने कार्यक्रम के बाहर निर्देशिका आकार की गणना करेंगे (उदाहरण के लिए, " du -sb *") और स्टड से इस जानकारी को पढ़ें।

और समाधान के हिस्सों पर और अधिक बारीकी से देखें।



0

इसके अलावा, डिस्कफ़िट का प्रयास करें, जो विभिन्न डिस्क पर कॉपी करने के लिए फ़ाइलों और निर्देशिकाओं का चयन करता है:

https://sourceforge.net/projects/discfit/


केवल लिंक के साथ उत्तर देना अच्छा उत्तर नहीं है। सॉफ्टवेयर की सिफारिश करते समय, कृपया इस रूपरेखा का पालन करें । आपको इसे बेहतर बनाने के लिए अपने उत्तर का विस्तार ( संपादन ) करना चाहिए । उदाहरण के लिए आपका उत्तर "उत्पाद का उपयोग करने के लिए HOW" का संक्षिप्त विवरण देने की आवश्यकता नहीं है।
कामिल मैकियोरोस्की

वेबसाइट से: "फ़िशीकल मीडिया (सीडी, डीवीडी, बीडी ...) टुकड़ों की न्यूनतम संख्या का उपयोग करने के लिए फ़ाइलों या निर्देशिकाओं के एक बड़े सेट की व्यवस्था करता है। आप परिणामी सेट को सीधे अपने जलते हुए सॉफ़्टवेयर (नीरो, डीवीडी) पर खींच सकते हैं। -चले जाओ...)"।
एंटोन

लगभग। उत्तर को बेहतर बनाने के लिए आपको उत्तर को संपादित करना चाहिए।
कामिल मैकियोरोस्की

लेखकों ने जो लिखा है, उसके अलावा और कुछ जोड़ने के लिए मैं और कुछ नहीं देख सकता एक शायद सिर्फ वेबसाइट पर जा सकता है और पूछताछ कर सकता है।
एंटोन

ठीक है। मेरा कहना है कि आपको अपना उत्तर संपादित करना चाहिए , न कि "विस्तार" के साथ टिप्पणी लिखें। यह उत्तर है कि उक्त रूपरेखा का अनुसरण करना चाहिए, उत्तर + टिप्पणियाँ नहीं। टिप्पणी में उद्धृत खंड आपके उत्तर में उद्धृत होना चाहिए। बस इतना ही।
कामिल मैकियोरोस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.