মোটামুটি সর্বোত্তম উপায়ে সম্ভব সবচেয়ে ছোট আয়তক্ষেত্রে বিভিন্ন আকারের আয়তক্ষেত্রগুলি প্যাকিংয়ের জন্য কোন অ্যালগরিদম ব্যবহার করা যেতে পারে?


273

আমি আয়তক্ষেত্রাকার বস্তুগুলির একটি গুচ্ছ পেয়েছি যা আমাকে সম্ভব ক্ষুদ্রতম জায়গায় প্যাক করতে হবে (এই স্থানটির মাত্রা দুটি শক্তির হওয়া উচিত)।

আমি বিভিন্ন প্যাকিং অ্যালগরিদম সম্পর্কে অবগত রয়েছি যা কোনও নির্দিষ্ট স্থানের পাশাপাশি আইটেমগুলি যথাসম্ভব প্যাক করবে, তবে এই ক্ষেত্রে সেই স্থানটি কতটা বড় হওয়া উচিত তা নিয়ে কাজ করার জন্য আমার অ্যালগরিদম প্রয়োজন।

যেমন Ive নিম্নলিখিত আয়তক্ষেত্র পেয়েছে বলে

  • 128 * 32
  • 128 * 64
  • 64 * 32
  • 64 * 32

এগুলি একটি 128 * 128 স্পেসে প্যাক করা যায়

 _________________
| 128 * 32 |
| ________________ |
| 128 * 64 |
| |
| |
| ________________ |
| 64 * 32 | 64 * 32 |
| _______ | ________ |

তবে যদি 160 * 32 এবং 64 * 64 একও থাকে তবে এটির জন্য 256 * 128 স্পেস প্রয়োজন

 ________________________________
| 128 * 32 | 64 * 64 | 64 * 32 |
| ________________ | | _______ |
| 128 * 64 | | 64 * 32 |
| | _______ | _______ |
| | |
| ________________ | ___ |
| 160 * 32 | |
| ____________________ | ___________ |

এমন কোন অ্যালগরিদম রয়েছে যা একটি গুচ্ছ আয়তক্ষেত্রগুলি প্যাক করতে এবং ধারকটির জন্য প্রয়োজনীয় আকার নির্ধারণ করতে সক্ষম হয় (২ টির একটি শক্তি, এবং প্রতিটি মাত্রার জন্য প্রদত্ত সর্বোচ্চ আকারের মধ্যে)?


6
দ্বিতীয় সমাধানটি কি অনুকূল নয়? এটি 228 বাই 224 হওয়া উচিত নয়?
মান্টাস বিদুটিস

"এই জায়গার মাত্রা দুটির শক্তি হওয়া উচিত" সুতরাং এটি কোন পার্থক্য করে না, এটি যা ছিল / তার জন্য আমি দুটির অ-শক্তি অনুমান করতে পারি না অন্তর্নিহিত হার্ডওয়্যার দ্বারা নিঃশর্ত সমর্থিত।
ফায়ার ল্যান্সার

2
যাইহোক এটি শেষ পর্যন্ত অ্যালগরিদমকে আরও সহজ করে তুলেছে (32x32 এ সব ফিট করার চেষ্টা করুন, যদি না হয় তবে 64x32, তবে 64x64, 128x64, ইত্যাদি চেষ্টা করুন) :)
ফায়ার ল্যান্সার


আমি এক ধরণের নিষ্ঠুর শক্তি সমাধান এখানে রেখেছি stackoverflow.com/a/47698424/1641247
শান

উত্তর:


67

দ্রুত এবং নোংরা প্রথম পাসের সমাধানটি শুরু করার জন্য সর্বদা দুর্দান্ত,

বড় থেকে ছোট ছোট লোভী প্লেসমেন্ট।

আপনার প্যাকড অঞ্চলে অবশিষ্ট বৃহত্তম আয়তক্ষেত্রটি রাখুন। যদি এটি কোথাও ফিট না করতে পারে তবে এটিকে এমন জায়গায় রাখুন যা প্যাক অঞ্চলটি যতটা সম্ভব কমিয়ে দেয়। আপনি সবচেয়ে ছোট আয়তক্ষেত্রটি শেষ না করা পর্যন্ত পুনরাবৃত্তি করুন।

এটি মোটেও নিখুঁত নয় তবে এটি সহজ এবং একটি দুর্দান্ত বেসলাইন। এটি এখনও আপনার মূল উদাহরণটি নিখুঁতভাবে প্যাক করবে এবং দ্বিতীয়টির জন্য আপনাকে একটি সমতুল্য উত্তর দেবে।


1
আমি কিছুটা কাগজে সেরকম কিছু নিয়ে খেলছিলাম, এখন বেশিরভাগ ক্ষেত্রে আয়তক্ষেত্রগুলি বা কোনও কিছু ঘোরানো ছাড়াই বেশ নিখুঁত দেখাচ্ছে
ফায়ার ল্যান্সার

1
আমি এটি বাস্তবায়ন করেছি এবং এটির মাধ্যমে পরীক্ষাগুলির একগুচ্ছ চালাচ্ছি, মনে হচ্ছে কেবলমাত্র কিছুটা নষ্ট হওয়া ডেটা রেখে খুব ভাল কাজ করবে। প্রতিটি পিক্সেল যাচাই করা স্থানের মাধ্যমে প্রতিটি রেক্টরের জন্য রৈখিক অনুসন্ধানের চেয়ে আরও কার্যকর করার জন্য আমার বাস্তবায়নটি পুনরায় লেখার দরকার এখন সেই পয়েন্টটি অবরুদ্ধ (সমস্ত বিদ্যমান রিকার বিরুদ্ধে) ...
ফায়ার ল্যান্সার

4
একটি সর্বোত্তম সমাধান jair.org/media/3735/live-3735-6794-jair.pdf
জিম

2
এটি কীভাবে অনুকূল কাজ করতে পারে তা কল্পনা করার জন্য আমার খুব কষ্ট হয়েছিল। সুতরাং আমি এটিকে কোড দিয়েছি (একটি বর্গক্ষেত্র আকারের) এবং ফলাফলগুলি দুর্দান্ত। এখানে একটি ডেমো অ্যানিমেশন রয়েছে: imgur.com/ISjxuOR
আটটিলা ট্যানই

@ জিমবাল্টার স্কোয়ার স্পেস ওয়াইস ... সম্ভবত ... গতি এবং স্কেলিবিলিটির দিক থেকে? আসলে তা না?
আরেক বাল

86

সমাধানগুলির সমীক্ষার জন্য এআরসি প্রকল্পে এই পৃষ্ঠাটি দেখুন , বাস্তবায়ন জটিলতা / সময় এবং অনুকূলতার মধ্যে একটি বাণিজ্য রয়েছে, তবে বেছে নিতে বিস্তৃত অ্যালগরিদম রয়েছে।

এখানে অ্যালগরিদমের একটি নির্যাস রয়েছে:

  1. ফার্স্ট-ফিট কমার উচ্চতা (এফএফডিএইচ) অ্যালগরিদম
    এফএফডিএইচ পরবর্তী স্তরের আর (অ-বর্ধমান উচ্চতায়) প্যাকেজ করে যেখানে আর ফিট করে fits কোনও স্তর যদি আরকে সামঞ্জস্য করতে না পারে তবে একটি নতুন স্তর তৈরি করা হয়।
    এফএফডিএইচের সময় জটিলতা: ও (n · লগ এন)।
    আনুমানিক অনুপাত: এফএফডিএইচ (আই) <= (17/10) · ওপিটি (আই) +1; 17/10 এর অ্যাসিম্পটোটিক বাউন্ডটি শক্ত।

  2. নেক্সট-ফিট কমিয়ে দেওয়া উচ্চতা (এনএফডিএইচ) অ্যালগরিদম
    এনএফডিএইচ আর ফিট করে তবে পরবর্তী স্তরে আর (বাড়ছে না উচ্চতায়) প্যাক করে। অন্যথায়, বর্তমান স্তরটি "বন্ধ" এবং একটি নতুন স্তর তৈরি করা হয়।
    সময়ের জটিলতা: ও (এন · লগ এন)।
    আনুমানিক অনুপাত: এনএফডিএইচ (আই) <= 2 · ওপিটি (আই) +1; 2 এর asyptotic বাউন্ডটি শক্ত।

  3. বেস্ট-ফিট কমিয়ে দেওয়া উচ্চতা (বিএফডিএইচ) অ্যালগরিদম
    বিএফডিএইচ পরবর্তী স্তরের আর (অ বর্ধমান উচ্চতায়) প্যাক করে, যেগুলিতে আর সামঞ্জস্য করতে পারে, যার জন্য অবশিষ্ট অনুভূমিক স্থান সর্বনিম্ন is কোনও স্তর যদি আরকে সামঞ্জস্য করতে না পারে তবে একটি নতুন স্তর তৈরি করা হয়।

  4. নীচে-বামে (বিএল) অ্যালগরিদম
    বিএল প্রথম ক্রম-বৃদ্ধি না করে আইটেমগুলি অর্ডার করে। বিএল পরবর্তী আইটেমটি নীচে যতটা ফিট হবে ততই প্যাক করে এবং তারপরে বামের যত কাছে যায় এটি কোনও প্যাকড আইটেমের সাথে ওভারল্যাপিং না করে যেতে পারে। নোট করুন যে বিএল কোনও স্তর-ভিত্তিক প্যাকিং অ্যালগরিদম নয়।
    সময়ের জটিলতা: ও (এন ^ 2)।
    আনুমানিক অনুপাত: বিএল (আই) <= 3 · ওপিটি (আই)।

  5. বেকারের আপ-ডাউন (ইউডি) অ্যালগরিদম
    ইউডি বিএল এবং এনএফডিএইচ একটি সাধারণীকরণের সংমিশ্রণ ব্যবহার করে। ফালা এবং আইটেমগুলির প্রস্থটি স্বাভাবিক করা হয় যাতে স্ট্রিপটি ইউনিটের প্রস্থে থাকে। ইউডি আইটেমগুলি অ-বর্ধমান প্রস্থে অর্ডার করে এবং তারপরে আইটেমগুলিকে পাঁচটি গ্রুপে বিভক্ত করে, প্রতিটি প্রস্থের প্রস্থে (1/2, 1], (1 / 3,1 / 2], (1 / 4,1 / 3 ], (1 / 5,1 / 4], (0,1 / 5]। স্ট্রিপটি পাঁচটি অঞ্চলে আর 1, ···, আর 5 বিভক্ত হয়েছে। মূলত, প্রস্থের প্রস্থের কিছু আইটেম (1 / i + 1, 1 / i], 1 <= i <= 4 এর জন্য, বিএল দ্বারা রি অঞ্চলে প্যাক করা হয়েছে। যেহেতু বিএল স্ট্রিপের ডানদিকে নীচে থেকে নীচে প্রস্থকে বাড়ানোর জায়গা ছেড়ে যায়, ইউডি প্রথমে এই সুবিধাটি গ্রহণ করে উপর থেকে নীচে জে = 1, ···, 4 (ক্রম) এর জন্য আরজেতে আইটেমটি প্যাক করা হচ্ছে such যদি কোনও স্থান না থাকে তবে আইটেমটি বিএল দ্বারা রিতে প্যাক করা হয় Finally শেষ পর্যন্ত, আকারের আইটেম সর্বাধিক 1/5 (জেনারালাইজড) এনএফডিএইচ অ্যালগরিদম দ্বারা আর 1, ···, আর 4 এর স্পেসে প্যাক করা হয়।
    আনুমানিক অনুপাত: ইউডি (আই) <= (5/4) · ওপিটি (আই) + (53/8) এইচ, যেখানে এইচ আইটেমের সর্বাধিক উচ্চতা; 5/4 এর এ্যাসিম্পটোটিক সীমাটি শক্ত।

  6. বিপরীত-ফিট (আরএফ) অ্যালগোরিদম
    আরএফ স্ট্রিপ এবং আইটেমগুলির প্রস্থকে স্বাভাবিক করে তোলে যাতে স্ট্রিপটি ইউনিটের প্রস্থের হয়। আরএফ প্রথমে প্রস্থের সমস্ত আইটেম 1/2 এর চেয়ে বেশি স্ট্যাক করে। অবশিষ্ট আইটেমগুলি ক্রমবর্ধমান উচ্চতায় বাছাই করা হয় এবং উচ্চতা H0 এর উপরে প্যাক করা হবে যেগুলি 1/2 এর বেশি বেশি তাদের কাছে পৌঁছায়। তারপরে আরএফ নীচের প্রক্রিয়াটি পুনরাবৃত্তি করে। মোটামুটিভাবে বলতে গেলে, আরএফটি আর কোনও জায়গা না পাওয়া পর্যন্ত উচ্চতা H0 এর লাইনের সাথে বাম থেকে ডানদিকে নীচের অংশে আইটেমগুলি প্যাক করে। তারপরে মোট প্রস্থ কমপক্ষে ১/২ না হওয়া পর্যন্ত ডান থেকে বাম এবং উপরে থেকে নীচে (বিপরীত স্তর বলা হয়) আইটেমগুলি প্যাক করে। তারপরে বিপরীত-স্তরটি নীচে ফেলে দেওয়া হয় যতক্ষণ না (তাদের অন্তত) নীচে কোনও আইটেম স্পর্শ করে। ড্রপ ডাউন কোনওভাবে পুনরাবৃত্তি হয়।
    আনুমানিক অনুপাত: আরএফ (আই) <= 2 · ওপিটি (আই)।

  7. স্টেইনবার্গের অ্যালগরিদম
    স্টেইনবার্গের অ্যালগোরিদম, কাগজে এম হিসাবে চিহ্নিত, উচ্চতা এইচ এর একটি উপরের প্রান্তটি সমস্ত আইটেম প্যাক করার জন্য প্রয়োজনীয় অনুমান করে যে এটি প্রমাণিত হয় যে ইনপুট আইটেমগুলি প্রস্থ এবং ডাবলাইটের উচ্চতার একটি আয়তক্ষেত্রে প্যাক করা যেতে পারে They তারা তখন সাতটি পদ্ধতি (সাতটি শর্ত সহ) সংজ্ঞায়িত করুন, প্রতিটি সমস্যার জন্য দুটি ছোট করে ভাগ করুন এবং পুনরাবৃত্তভাবে সমাধান করুন। এটি প্রদর্শিত হয়েছে যে কোনও ট্র্যাকটেবল সমস্যা সাতটি শর্তের মধ্যে একটিকে সন্তুষ্ট করে।
    আনুমানিক অনুপাত: এম (আই) <= 2 · ওপিটি (আই)।

  8. স্প্লিট-ফিট অ্যালগরিদম (এসএফ) এসএফ আইটেমগুলিকে দুটি গ্রুপে বিভক্ত করে, এল 1 এর প্রস্থটি 1/2 এর চেয়ে বেশি এবং এল 2 সর্বাধিক 1/2 হয়। এল 1 এর সমস্ত আইটেম প্রথমে এফএফডিএইচ দ্বারা প্যাক করা হয়। তারপরে সেগুলি এমনভাবে সাজানো হয়েছে যাতে 2/3 এর বেশি প্রস্থের সমস্ত আইটেম প্রস্থের সাথে 2/3 এর নিচে থাকে। এটি প্রস্থের 1/3 প্রস্থের সাথে একটি আয়তক্ষেত্র আর তৈরি করে। L2- এ থাকা বাকী আইটেমগুলি তখন আর এফএফডিএইচ ব্যবহার করে এল 1 দিয়ে প্যাক করা ওপরের স্থানগুলিতে প্যাক করা হয়। আর-তে তৈরি স্তরগুলি এল 1 এর প্যাকিংয়ের উপরে তৈরি হওয়া নীচে বিবেচিত হয়।
    আনুমানিক অনুপাত: এসএফ (আই) <= (3/2) · ওপিটি (আই) + 2; 3/2 এর অ্যাসিম্পটোটিক সীমাটি শক্ত।

  9. স্লেটারের অ্যালগরিদম
    স্লিটারের অ্যালগরিদম চারটি ধাপ নিয়ে গঠিত:

    1. 1/2 এর চেয়ে বেশি প্রস্থের সমস্ত আইটেমগুলি স্ট্রিপের নীচে একে অপরের উপরে প্যাক করা হয়। ধরা যাক এইচ 0 হ'ল ফলস্বরূপ প্যাকিংয়ের উচ্চতা পরবর্তী সমস্ত প্যাকিং এইচ 0 এর উপরে ঘটবে।

    2. অবশিষ্ট আইটেমগুলি ক্রমবর্ধমান উচ্চতা দ্বারা অর্ডার করা হয়। উচ্চতা h0 এর রেখা বরাবর বাম থেকে ডানদিকে আইটেমগুলির একটি স্তর (বর্ধমান উচ্চতার ক্রমে) প্যাক করা হয়।

    3. এরপরে একটি লম্বালম্বী রেখাটি দুটি সমান অংশে স্ট্রিপটি কাটতে মাঝখানে আঁকা হয় (নোট করুন এই লাইনটি এমন কোনও অংশ কাটতে পারে যা ডান অর্ধে আংশিকভাবে প্যাক করা আছে)। অর্ধেক দৈর্ঘ্যের দুটি অনুভূমিক রেখাংশ অঙ্কন করুন, একটি বাম অর্ধেক জুড়ে (বাম বেসলাইন বলে) এবং একটি ডান অর্ধেক পেরিয়ে (ডান বেসলাইন নামে পরিচিত) যতটা সম্ভব নীচু করুন যাতে দুটি লাইন কোনও আইটেম অতিক্রম না করে।

    4. বাম বা ডান বেসলাইনটি বেছে নিন যা নিম্ন উচ্চতার এবং পরবর্তী আইটেমটি প্রশস্ত না হওয়া অবধি স্ট্রিপের সাথে সম্পর্কিত অর্ধেক অংশে আইটেমের একটি স্তর প্যাক করুন।

    একটি নতুন বেসলাইন তৈরি হয় এবং সমস্ত আইটেমটি প্যাক না করা পর্যন্ত স্টেপ (4) নিম্ন বেসলাইনটিতে পুনরাবৃত্তি হয়।
    সময়ের জটিলতা: ও (এন · লগ এন)।
    স্লেটারের অ্যালগোরিদমের আনুমানিক অনুপাত 2.5 যা শক্ত।


6
এইগুলির জন্য সমস্ত জায়গার প্রস্থ জানতে হবে।
কোয়ান্টাম

1
@ কোয়ান্টাম poss সম্ভবত খুব গুরুত্বপূর্ণ নয় যেহেতু ওপিকে দু'পক্ষের শক্তি হওয়া দরকার, তাই আমরা কেবল পর্যাপ্ত এলাকা সহ একগুচ্ছ মাত্রা চেষ্টা করতে পারি।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

19

প্যাকিংয়ের সমস্যাগুলি একবার দেখুন । আমার মনে হয় আপনার '2 ডি বিন প্যাকিং'-এর আওতায় পড়ে। এটি এবং অন্যান্য প্যাকিং সমস্যার সমাধান থেকে আপনার অনেক কিছু শিখতে সক্ষম হওয়া উচিত।

এছাড়াও দেখুন: আয়তক্ষেত্রাকার চিত্রের ডেটা বর্গক্ষেত্রের টেক্সচারে প্যাকিং।


এখানে একটি অপ্টিমাইজ করা আয়তক্ষেত্র-প্যাকিং অ্যালগরিদমের আরেকটি চমৎকার উদাহরণ রয়েছে: কোডেপ্রজেক্ট
অ্যান্ডারসন গ্রিন

সমস্যাটিতে এও উল্লেখ করা হয়েছে: en.wikedia.org/wiki/… উল্লেখযোগ্যভাবে, এটি বিন প্যাকিংকে অজানা আকারের একক বিনের মধ্যে সীমাবদ্ধ করে, আমি ভাবছি এটি এখনও এনপি-সম্পূর্ণ রয়েছে is
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

17

এই সমস্যা নিয়ে বিস্তৃত সাহিত্য রয়েছে। ভাল লোভী হিউরিস্টিক হ'ল ধারকটির নীচে এবং বাম দিকে প্রথম উপলব্ধ অবস্থানে বৃহত্তম অঞ্চল থেকে ক্ষুদ্রতম পর্যন্ত আয়তক্ষেত্র স্থাপন করা। মাধ্যাকর্ষণটি সমস্ত আইটেমকে নীচে বাম কোণে টানুন। এই গুগলের বর্ণনার জন্য "চ্যাজেল নীচে বাম প্যাকিং"।

অনুকূল সমাধানের জন্য, অত্যাধুনিক কৌশলগুলি কয়েক সেকেন্ডে 20 টির বেশি আয়তক্ষেত্র প্যাক করতে পারে। হুয়াংয়ের একটি অ্যালগরিদম রয়েছে যা আয়তক্ষেত্রের একটি সেট নির্দিষ্ট আকারের বাউন্ডিং বাক্সে ফিট করতে পারে কিনা তা নির্ধারণ করার সমস্যা থেকে ক্ষুদ্রতম এনকোলেসিং বাউন্ডিং বাক্স সন্ধানের সমস্যাটিকে পৃথক করে। আপনি তার প্রোগ্রামটিকে একটি আয়তক্ষেত্রের সেট দেন এবং এটি আপনাকে প্যাক করার জন্য প্রয়োজনীয় ক্ষুদ্রতম এনকোলেসিং বাউন্ডিং বাক্সকে বলে।

আপনার ক্ষেত্রে, আপনার বাইরের লুপটি সর্বনিম্ন সম্ভব বাউন্ডিং বাক্স থেকে wardর্ধ্বমুখী হওয়া উচিত (প্রস্থ এবং উচ্চতা ক্রমান্বয়ে দুটির শক্তির দ্বারা বৃদ্ধি করা)। এই প্রতিটি আবদ্ধ বাক্সের জন্য, আপনি আপনার আয়তক্ষেত্রগুলির জন্য কোনও প্যাকিং খুঁজে পেতে পারেন কিনা তা পরীক্ষা করে দেখুন। প্রথম "হ্যাঁ" উত্তর না পাওয়া পর্যন্ত আপনি একসাথে "না" উত্তর পাবেন, যা সর্বোত্তম সমাধান হওয়ার নিশ্চয়তা দেওয়া হবে।

আপনার অ্যালগরিদমের অভ্যন্তরীণ লুপের জন্য - যেটি নির্দিষ্ট আকারের একটি বাউন্ডিং বাক্সে "হ্যাঁ" বা "না" জবাব দেয়, আমি হুয়াং রেফারেন্সটি সন্ধান করব এবং কেবল তার অ্যালগরিদমটি প্রয়োগ করব। তিনি মৌলিক অ্যালগরিদমের শীর্ষে অনেকগুলি অপ্টিমাইজেশন অন্তর্ভুক্ত করেছেন তবে আপনার কেবল সত্যিকারের মৌলিক মাংস এবং আলু প্রয়োজন। যেহেতু আপনি আপনার সন্ধানের সময় প্রতিটি শাখা পয়েন্টে আবর্তনগুলি পরিচালনা করতে চান, উভয় ঘূর্ণন যখন কোনও সমাধানের ফলে না ঘটে কেবল কেবল উভয় আবর্তন এবং ব্যাকট্র্যাক চেষ্টা করুন।


9

আমি মোটামুটি নিশ্চিত যে এটি একটি এনপি-হার্ড সমস্যা , সুতরাং, সর্বোত্তম সমাধানের জন্য, আপনাকে ব্যাকট্র্যাকিং অ্যালগরিদম প্রয়োগ করতে হবে যা প্রতিটি সম্ভাব্য সংমিশ্রণের চেষ্টা করে।

সুসংবাদটি হ'ল সীমিত 2D স্পেসে 2D আয়তক্ষেত্রগুলি প্যাক করার প্রয়োজনের কারণে আপনি প্রথম দিকে প্রচুর সম্ভাবনা ছাঁটাই করতে পারেন, তবে এটি খারাপ নাও হতে পারে।


3
আপনি সম্ভবত এনপি-সম্পূর্ণ বলতে চাইছেন।
স্টার ব্লু

7
ঠিক আছে, যদি এটি এনপি সম্পূর্ণ হয়, তবে এটি সমাধান করা সহজ, কেবল ভ্রমণকারী বিক্রয়কর্মীর সমতুল্য উদাহরণটি সমাধান করুন এবং আপনি সেখানে যান। তবে এটি যে তাত্ক্ষণিকভাবে দেখানো হয়েছে তা তুচ্ছ, যেহেতু এনপি-সম্পূর্ণ সমস্যাগুলি সিদ্ধান্তের সমস্যা (আপনি হ্যাঁ / কোন উত্তর ফিরে পাবেন), এবং বহু-কালীন যাচাইকরণ অ্যালগরিদম রয়েছে। প্রশ্ন "সেখানে আয়তক্ষেত্র A, B, C- এর একটি ব্যবস্থা আছে ... কম এলাকা পর্যন্ত সময় লাগতে চেয়ে 256 * 128 দ্বারা NP-সম্পূর্ণ হতে পারে।
অন্ধকার

2
@ ক্লিপসটি সঠিক। Jair.org/media/3735/live-3735-6794-jair.pdf থেকে "অপ্টিমাইজেশান সমস্যাটি এনপি-হার্ড, যখন একটি নির্দিষ্ট আয়তক্ষেত্রের সেটটি একটি নির্দিষ্ট বাউন্ডিং বাক্সে প্যাক করা যায় কিনা তা সিদ্ধান্ত নেওয়ার সমস্যাটি এনপি-সম্পূর্ণ, বিন-প্যাকিং থেকে হ্রাসের মাধ্যমে (কর্ফ, 2003) " তবে, নোট করুন যে ওপি "মোটামুটি সর্বোত্তম উপায়" চেয়েছিল, এবং পি এর জন্য এর সমাধান রয়েছে, "যথেষ্ট" এর বিস্তৃত সংজ্ঞা দেওয়ার জন্য।
জিম বাল্টার

আমি এনপি-কঠোরতাও সন্দেহ করি তবে আমাদের একটি রেফারেন্স / প্রমাণ প্রয়োজন।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

2
পবিত্র থ্রেড নেক্রো, ব্যাটম্যান এই প্যাকিং সমস্যা, এবং এটা ইতিমধ্যে দ্বারা NP-কঠিন হতে প্রমাণিত করছে তা শ্রেষ্ঠ: en.wikipedia.org/wiki/Packing_problems
Blindy

2

আপনার যা প্রয়োজন তা https://github.com/nothings/stb/blob/master/stb_rect_pack.h এ রয়েছে

নমুনা:

stbrp_context context;

struct stbrp_rect rects[100];

for (int i=0; i< 100; i++)
{
    rects[i].id = i;
    rects[i].w = 100+i;
    rects[i].h = 100+i;
    rects[i].x = 0;
    rects[i].y = 0;
    rects[i].was_packed = 0;
}

int rectsLength = sizeof(rects)/sizeof(rects[0]);

int nodeCount = 4096*2;
struct stbrp_node nodes[nodeCount];


stbrp_init_target(&context, 4096, 4096, nodes, nodeCount);
stbrp_pack_rects(&context, rects, rectsLength);

for (int i=0; i< 100; i++)
{
    printf("rect %i (%hu,%hu) was_packed=%i\n", rects[i].id, rects[i].x, rects[i].y, rects[i].was_packed);
}

1

একটি সাধারণ সমাধান অ-তুচ্ছ হয় (গণিতটি সম্পূর্ণরূপে **** অসম্ভব
হয়ে ওঠার পক্ষে কথা বলে) সাধারণত লোকেরা সম্ভাব্য সংমিশ্রণের চেষ্টা করার জন্য জেনেটিক অ্যালগরিদম ব্যবহার করে তবে আপনি প্রথমে সবচেয়ে বড় আকারটি রেখে এবং তারপরে বিভিন্ন স্থানের চেষ্টা করে যুক্তিসঙ্গতভাবে ভাল করতে পারেন পরবর্তী বৃহত্তম এবং তাই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.