সমষ্টিগুলির 'সেটামুক্ত' করার জন্য দক্ষ অ্যালগরিদম


24

এক্স-এর একাধিক সংখ্যা দেওয়া, সমস্ত সম্ভাব্য পরিমাণের সেট বিবেচনা করুন:

অঙ্কের(এক্স)={Σআমিএকজনআমি|একজনএক্স}

উদাহরণস্বরূপ, অঙ্কের({1,5})={0,1,5,6} যখন অঙ্কের({1,1})={0,1,2}

বিপরীতমুখী অপারেশন গণনার জন্য সবচেয়ে কার্যকর অ্যালগরিদম কী (অঙ্কের ইনপুট সেটটির আকারের সাথে পরিমাপ করা হয়)? বিশেষ করে নিম্নলিখিতগুলির যে কোনওটির দক্ষতার সাথে গণনা করা সম্ভব:

  1. প্রদত্ত সেটটি কোনও যোগফলের বৈধ সেট কিনা। (উদাহরণস্বরূপ, {0,1,2} বৈধ কিন্তু {0,1,3} নয়।)
  2. একটি মাল্টিসেট যা প্রদত্ত সেটটিতে যোগফল দেয়।
  3. ক্ষুদ্রতম multiset প্রদত্ত সেটে অঙ্কের। (উদাহরণস্বরূপ, {1,2} এবং {1,1,1} উভয় সমষ্টি {0,1,2,3} কিন্তু সাবেক ছোট।)

1
আপনি কি আমাদের অঙ্কের সেটের চেয়ে অঙ্কের মাল্টিসেটটি দিতে পারবেন ? এটি একটি আনন্দদায়ক প্রতিসাম্য তৈরি করবে (আপনি মূল্যবোধের মাল্টিসেট দিয়ে শুরু করার সাথে দেখে)।
ডিডাব্লিউ

1
আরেকটি প্রশ্ন - আপনি কি তাত্ত্বিক ফলাফলগুলিতে সর্বাধিক আগ্রহী (উদাহরণস্বরূপ, অ্যাসিম্পটোটিক জটিলতা), বা ব্যবহারিক সমাধান (প্রকল্পগুলি যা অনুশীলনে ঠিকঠাক কাজ করতে পারে)? যদি পরবর্তীটি হয় তবে আপনার কাছে কী পরামিতিগুলির জন্য আদর্শ মানগুলির ধারণা আছে: যেমন, মাল্টিসেট এক্সের আকার, মাল্টিসেট এক্সের বৃহত্তম উপাদানের আকার, সর্বোচ্চ গুণ? এটি আইএলপি সলভার বা স্যাট সলভারের মতো "বড় হাতুড়ি" প্রয়োগ করা যুক্তিসঙ্গত কিনা তা প্রভাবিত করতে পারে।
ডিডাব্লিউ

@ ডাব্লুডাব্লু আমি অবশ্যই মাল্টিসেটের চেয়ে অঙ্কের সেট ব্যবহার করতে আগ্রহী (যদিও এটি একটি আকর্ষণীয় সমস্যাও হতে পারে)। এছাড়াও, এটি মূলত একটি বিনোদনমূলক গণিতের সমস্যা ছিল, তাই আমি মূলত ব্যবহারিক সমাধানের চেয়ে জটিলতার সীমানায় আগ্রহী।
উরি গ্রান্ট

3
যদি আপনাকে রাশিগুলির মাল্টিসেট দেওয়া হয়, তবে এটি লোভজনকভাবে করা খুব সোজা is (উদাহরণস্বরূপ math.stackexchange.com/questions/201545/… দেখুন )।
jschnei

@ উরিজারফাতী ইনপুট হিসাবে দেওয়া সেটটি ইতিমধ্যে বাছাই হয়েছে? শেষ পর্যন্ত এই সেট বা মাল্টিসেট? মন্তব্য এখনও পরামর্শ দেয় যে আপনি খাঁটি সেট চান।
খারাপ

উত্তর:


9

সমাধান

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

ন্যূনতম সেট অ্যালগরিদম

  1. যোগফল (বহু) সেট থেকে সর্বাধিক উপাদান সন্ধান করুন । পি , সম্ভাব্য সর্বনিম্ন (বহু) সেটটি প্রাথমিকভাবে খালি isamP

  2. কেবলমাত্র একটি গোষ্ঠী না থাকলে সম্ভাব্য সকল উপায়ে প্রতিনিধিত্ব করুন যোগফল যোগ করতে একটি এম , এস আই জে = { ( একটি আই , জে ) যোগ করুন | একটি আমি + + একটি = একটি মি }amamSij={(ai,aj)|ai+aj=am}

  3. অঙ্কের সেট থেকে সমস্ত উপাদান অন্তর্ভুক্ত রয়েছে তা পরীক্ষা করুন।

  4. সর্বাধিক উপাদান খুঁজুন সব থেকে এস আমি নিম্নলিখিত সম্পত্তি সঙ্গে (একত্রে অর্থ): প্রত্যেকের জন্য S আমি , একটি গুলি উভয় হয় এস আমি , অথবা আমরা জানতে পারেন একটি পি অঙ্কের সেট যাতে থেকে একটি পি + + একটি গুলি করা হয় এস আমি asSijSijasSijapap+asSij

  5. যদি কেস করে ধারণ করে না একটি গুলি , শুধু যোগফল একটি গুলি + + একটি পি , অপসারণ একটি পি + + একটি গুলি থেকে এস আমি (অথবা শুধু এটা উপেক্ষা করার একটি চিহ্ন সেট) এবং সন্নিবেশ একটি পি এবং একটি গুলি মধ্যে এস আমি পরিবর্তে।Sijasas+apap+aগুলিএসআমিএকটিপিএকটিগুলিএসআমি

  6. একটি উপাদান যে উপস্থিত হয়, তাহলে সব থেকে সরান এটা S আমি একবার এবং সম্ভাব্য সংক্ষিপ্ত সেটের উপাদানের তালিকা থেকে এটি যোগ (বা শুধু একটি চিহ্ন এটা উপেক্ষা করা আমার স্পর্শ আর তে সেট করে এবং নয়) পিএসআমিএসআমিপি

  7. সমস্ত খালি না হওয়া পর্যন্ত পুনরাবৃত্তি করুনএসআমি

  8. যদি কিছু শূন্য থাকে এবং আমরা চালিয়ে যেতে না পারি তবে সমস্ত এস আই জে থেকে সর্বাধিক মান দিয়ে আবার চেষ্টা করুন ।এসআমিএসআমি

  9. অপসারণ ছাড়াই পুনরাবৃত্তিমূলক পদক্ষেপগুলি পুনরুদ্ধার করুন এবং উপরে পাওয়ার সেট কভারেজ অ্যালগরিদম দিয়ে চালিয়ে যান । (এই আগে, আপনি একটি নিরাপদ-যাচাই করতে পারেন যে পি সব উপাদান আছে যা দুটি উপাদান যাতে তারা নিশ্চিত সেট অন্তর্নিহিত হতে হবে একটি সমষ্টি হিসাবে প্রতিনিধিত্ব করা যাবে না অন্তর্ভুক্ত করা হয়েছে। উদাহরণ হিসেবে বলা যায়, ন্যূনতম উপাদান থাকতে হবে পি ।)পিPP

(১০. লক্ষ্য করুন যে একটি ন্যূনতম সেট সমাধান যা অ্যালগরিদমের লক্ষ্য এটি একই সংখ্যার একাধিক পুনরাবৃত্তি ধারণ করতে পারে না))

উদাহরণ:

{2,3,5,7,8,10,12,13,15}

অঙ্কের সেট থেকে দুটি সংখ্যার যোগফল হিসাবে সমস্ত সম্ভাব্য উপায়ে 15 টি উপস্থাপন করুন।

(13,2),(12,3),(10,5),(8,7)

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

প্রথম গোষ্ঠীর ১৩ টি 13 = 8 + 5 তাই 13 জরিমানা, তবে দ্বিতীয় গ্রুপের 12 টি জরিমানা নয়, কারণ অঙ্কের সেটগুলিতে 12 = 8 + 4 বানাতে 4 নেই। পরবর্তী আমরা with. দিয়ে চেষ্টা করি তবে অবিলম্বে 13 টি কভার করা যায় না, 6 নেই।

এরপরে আমরা 5 টি চেষ্টা করি। 13 = 5 + 8, 12 = 5 + 7, 10 = 5 + 5 এবং শেষের জন্য হয় 8 = 5 + 3 বা 7 = 5 + 2 তবে উভয়ই নয়। গ্রুপগুলি এখন:

((5,8),2),((5,7),3),((5,5),5),((5,3),7)

5 সব দলে দলে পুনরায় হয় তাই আমরা নিষ্কর্ষ । আমরা প্রতিটি গ্রুপ থেকে কেবল একবার 5 বের করি।পি={5}

(8,2),(7,3),(5,5),(3,7)

স্পষ্টতই 5 টিরও বেশি উপরে যাওয়ার কোনও বিন্দু নেই তাই আমরা আবার 5 টি চেষ্টা করব। 8 = 5 + 3, 7 = 5 + 2, তাই সব ঠিক আছে

((5,3),2),((5,2),3),(5,5),(3,(5,2))

এটি পুনরাবৃত্তি হবার কারণে সমস্ত গোষ্ঠী থেকে আবার একটি 5 বের করুন। (এটি সাধারণ নয় তবে আমাদের মামলাটি ইচ্ছাকৃতভাবে তৈরি করা হয়েছে যাতে আমাদের পুনরাবৃত্তি হলে কী করতে হবে তা প্রদর্শন করতে।) পি={5,5}

(3,2),(2,3),(5),(3,2)

এখন আমরা 3 দিয়ে চেষ্টা করি এবং 5 = 3 + 2 থাকি। এটি গ্রুপে যুক্ত করুন।

(3,2),(2,3),(3,2),(3,2)

এখন 3 এবং 2 যেহেতু তারা সর্বত্র পুনরাবৃত্তি হয় নিষ্কর্ষ এবং আমরা জরিমানা এবং দলের খালি আছে।P={5,5,3,2}

(),(),(),()

এখন, আমাদের অপসারণ ছাড়াই পুনরাবৃত্তিমূলক পদক্ষেপগুলি পুনরায় তৈরি করতে হবে, এর সহজরূপে থেকে উপাদানগুলি সরিয়ে না দিয়ে কেবল উপরের কাজগুলি করা হয়েছে কেবল সেগুলিকে পি-তে রেখে দেওয়া এবং এটির আর পরিবর্তন না করার জন্য চিহ্নিত করা।SijP

( ( 5 , 8 ) , 2 ) , ( ( 5 , 7 ) , 3 ) , ( ( 5 , 5 ) , 5 ) , ( ( 5 , 3 ) , 7

(13,2),(12,3),(10,5),(8,7)
( ( 5 , ( 5 , 3 ) ) , 2 ) , ( ( 5 , ( 5 , 2 ) ) , 3 ) , ( ( 5 , ( 3 , 2 ) ) , 5 ) , ( ( 5 , 3 ) , ( 5 , 2 ) )
((5,8),2),((5,7),3),((5,5),5),((5,3),7)
((5,(5,3)),2),((5,(5,2)),3),((5,(3,2)),5),((5,3),(5,2))

পাওয়ার সেট কভারেজ

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

  1. ন্যূনতম শক্তি 2 ব্যবহার করে সর্বনিম্ন সেট থেকে সমস্ত উপাদান এনকোড করুন ক্রমটি গুরুত্বপূর্ণ নয়। একই উপাদানটিকে পুনরাবৃত্তি করার সাথে একাধিকবার নতুন মান দিয়ে এনকোড করুন। সি = 1 থেকে শুরু করুন, প্রতিটি পরবর্তী উপাদানটিতে সি = 2 সি থাকে।

(2=[1],3=[2],5=[4],5=[8])
  1. পুনরুদ্ধার করা তালিকার উপাদানগুলিকে প্রতিস্থাপন করুন,

((5,(5,3)),2),((5,(5,2)),3),((5,(3,2)),5),((5,3),(5,2))

এনকোডিং সহ: 2 সহ 1, 3 দিয়ে 2, 5 দিয়ে 4 এবং আরও 5 দিয়ে 8 দেখুন যে প্রতিটি উপাদানটির পুনরাবৃত্তি করা সত্ত্বেও আলাদা আলাদা এনকোডিং রয়েছে।

((4,(8,2)),1),((4,(8,1)),2),((4,(2,1)),8),((8,2),(4,1))
  1. আমাদের কাছে থাকা এই মুহুর্তে সমস্ত মধ্যবর্তী পরিমাণ সংগ্রহ করুন (1,2,4,8)

((4,(10)),1),((4,(9)),2),((4,(3)),8),((10),(5))

মধ্যবর্তী অঙ্কের পরিমাণ (1,2,3,4,5,8,9,10)

((14),1),((13),2),((7),8),(15)

মধ্যবর্তী অঙ্কের পরিমাণ (1,2,3,4,5,8,9,10,13,14,15)

{(15),(15),(15),(15)}
  1. 2m1mm=4

  2. অবধি অনুপস্থিত নম্বর সংগ্রহ করুন12m1

(6,7,11,12)

  1. নিম্নলিখিত উপায়ে তাদের অনুপস্থিতি ন্যায়সঙ্গত করুন: বাইনারি আকারে প্রতিটি সংখ্যা প্রতিনিধিত্ব করুন

(6=01102) (7=01112) (11=10112) (12=10102)

601102(2=[1],3=[2],5=[4],5=[8]){2,3,5,7,8,10,12,13,15}তাই সব ঠিক আছে।

701112(2=[1],3=[2],5=[4],5=[8])

1112

কোনও বাইনারি উপস্থাপনা যদি সেই যোগফলের সাথে মিলিত হয় যা পাওয়া যায় না, তবে কোনও সমাধান নেই বলে রিপোর্ট করুন।

(2,3,5,5)

আলোচনা

অ্যালগরিদম সরবরাহ করা দরকার ছিল যা পরিসংখ্যানগুলি পাওয়ার সেট সমাপ্তিটি কভার করে কিনা, যা বাইনারি সম্প্রসারণের মধ্যে গোপন রয়েছে check উদাহরণস্বরূপ, যদি আমরা প্রাথমিক উদাহরণ থেকে 8 এবং 7 বাদ রাখি, প্রথম অংশটি এখনও সমাধান সরবরাহ করবে, কেবলমাত্র দ্বিতীয় অংশটি যোগফলের অনুপস্থিত সংমিশ্রনের রিপোর্ট করবে।

mnlog(m)mlog2(m)mnlog(m)

mlogmmlog2(m)

mlog3(m)

অ্যালগরিদমের অংশগুলি ধরে নেওয়া হয় যে আমরা রৈখিক সময়ে যোগের যোগফল খুঁজে পেতে পারি এবং এর জন্য বাছাই করা দরকার।

ভুল সূচনা

2,3,4,5,6,7,8,9,10,11,12,13,152,3,4,6 which you get if you start algorithm from 6. However we can start our algorithm from 7, since there is nothing in step 4. that would say not to, and lock ourselves in, the algorithm cannot end properly. The reason is that 7 is 7=4+3 and 4 and 3 are in the solution. So locked algorithm does not always mean that there is no solution, just to try again with lower initial value. In that case, some ideas about the possible values are hidden within remaining Sij. That is why we suggested starting from there in case of failure.

Another example, if you miss and start algorithm from 5, you would get 5,4,3,3 but this one does not include 2.

Notice that this algorithm is not going to give a derived solutions like 2,2,3,4,4, which we got simply by turning 6 into 4 and 2 in the solution 2,3,4,6. There are special rules that cover these versions.

The purpose of this algorithm is to provide a solution once we have started it all correctly.

Improvements

Step 4. is the one that could be upgraded in this manner: instead of maximal we could try out every element in descending order that satisfies the given condition. We create a separate branch for each. If some branch does not give a solution, cancel it.

For example for 2,3,4,5,6,7,8,9,10,11,12,13,15 we could try in the first round 7,6,5,4 in separate ways since all of them are passing the first test. (There is no reason to use 2 or 3 since we know they have to be in the underlying set.) and simply continue that way all around until we collect all versions that can reach the end. This would create a full-coverage solution which would discover more than one underlying set.

Another thing, since we know that we cannot have more than one repetition if the case is minimal, we can incorporate this in our algorithm.

Overall, the condition in step 4. that a number must repeat in every group or have ability to create a sum is strong enough to get us out of direct exponential waters, which would be an algorithm of simply trying out every combination and creating the power set over each until we find a match.


1
আরও বিস্তৃতভাবে: আমি একটি অ্যালগোরিদমের একটি পাঠ্য বিবরণ দেখতে পাচ্ছি, তবে (ক) কোনও সিউডোকোড নেই এবং (খ) সঠিকতার প্রমাণ নেই। আপনি কেন মনে করেন যে এই পদ্ধতির একটি অ্যালগরিদম সরবরাহ করে যা সমস্ত সম্ভাব্য ইনপুটগুলিতে সঠিকভাবে কাজ করবে? যৌক্তিকতা কি? আপনার কাছে কি এর সঠিকতার প্রমাণ রয়েছে?
ডিডাব্লু

আমি মনে করি যে সমস্যাটি প্রায় একসাথে 30 ঘন্টা কাজ নিয়েছে (30 ঘন্টা প্রতি ঘন্টার হার, ভাল ...)। তবে কোনও প্রদত্ত বিকল্প নেই।

শেষ পর্যন্ত উত্তরটি প্রাপ্য সেটির সাথে উত্তরটি পড়ুন। মহান কাজ!
উরি গ্রান্ট

1

দ্রষ্টব্য: এটি সাধারণভাবে বেশিরভাগ ক্ষেত্রে কাজ করে না, নীচে উরির প্রতিরূপ দেখুন।

একটি নির্দিষ্ট সেটের জন্য কমপক্ষে 1. এবং 2 অর্জনের একটি উপায় ওয়াই (ন্যূনতমতার জন্য কিছুটা টুইটের প্রয়োজন) বাছাই করা ওয়াই প্রথমে, প্রয়োজনে):

  • কি না তা পরীক্ষা 0ওয়াই। তা না হলে এর সমাধান নেই।
  • দিন Y সবচেয়ে ছোট ধনাত্মক সংখ্যা হতে ওয়াই। তারপরY অবশ্যই থাকতে হবে এক্স, যদি এটি বিদ্যমান থাকে (অন্যথায় এটি ছোট ধনাত্মক সংখ্যার যোগফল হবে, যা এর মধ্যেও ঘটবে ওয়াই)।
  • দিন z- র1<<z- রএন এর বাকি সদস্য হতে ওয়াই। আমরা একটি সেট খুঁজতে চেষ্টা করবওয়াই' যেমন যে ওয়াই=ওয়াই'+ +{0,Y}। স্পষ্টত0 অবশ্যই থাকতে হবে ওয়াই'। জন্যআমি=1,...,এন: যদি z- রআমি+ +Yওয়াই, যোগ করুন z- রআমি থেকে ওয়াই'; অন্যথায়, যদিz- রআমি-Yওয়াই, কোন সমাধান নেই; অন্যথায় (যেমন যদিz- রআমি+ +Yওয়াই, কিন্তু z- রআমি+ +Yওয়াই), আমাদের দরকার নেই z- রআমি মধ্যে ওয়াই'
  • পুনরাবৃত্তি সঙ্গে পুনরাবৃত্তি ওয়াই', সর্বনিম্ন উপাদান সংগ্রহ Y,Y',...একটি মাল্টিসেট মধ্যে। আপনি যদি খালি সেট দিয়ে শেষ করেন তবে এটি আপনার সমাধান}

প্রতিটি পুনরাবৃত্তির পদক্ষেপে, সেটটির আকার কমপক্ষে হ্রাস পায় 1 (যেহেতু আমরা সর্বনিম্ন উপাদান বাদ দিই Y), সুতরাং পদক্ষেপের সংখ্যা রয়েছে হে(এন)। প্রতিটি ধাপে বর্তমান সেটটিতে একক পুনরাবৃত্তি থাকে anহে(এন2) মোট জটিলতা (গাণিতিক ক্রিয়াকলাপগুলির জন্য ইউনিট ব্যয় ধরে)

একটি সর্বনিম্ন সমাধান সন্ধান করা (নোট করুন যে এটি অগত্যা অনন্য নয়; উদাহরণস্বরূপ, এর জন্য ওয়াই={0,1,3,4,5,6,7} আমাদের আছে {0,1,3,4,6} এবং {0,1,3,5,6}) কিছুটা বেশি জড়িত: ন্যূনতম সন্ধানের পরে Yওয়াই, আপনি পাটিগণিত অগ্রগতি বিশ্লেষণ করবে {একটি+ +Y} মধ্যে ওয়াই, যদি তাদের মধ্যে একটি সিঙ্গলটন হয় তবে তা প্রত্যাখ্যান করুন এবং অন্যথায় বিকল্প সদস্যগুলি বেছে নিন ওয়াই'; যদি কোনও অগ্রগতির বিজোড় দৈর্ঘ্য হয়, আপনার ক্রমাগত সদস্যদের কয়েক জোড়া বাছাই করা উচিত, অতএব অদ্বিতীয়তা।


Is it obvious that Y' doesn't lead to a dead end? After all there can be many Y's such that Y=Y'+{0,y}. For example {0,1,2,3,4} = {0,2,3}+{0,1} = {0,1,2,3}+{0,1} but the former decomposition leads to a dead end.
উরি গ্রান্ট

That is true, and is a real problem. I'll have to see if it can be fixed. Thanks!
Klaus Draeger

@UriZarfaty, I wonder if Klaus's algorithm might be correct for the special case where you start with a set rather than a multiset (i.e., no item in the multiset has multiplicity more than 1). Do you have a counterexample? Maybe it's interesting to first look for an algorithm for the special case where you start with a set rather than a multiset. If it works for that case, we might be able to generalize it to work for a multiset, e.g., by trying to find a set Y and a maximal number k such that Y=Y+{0,y,,y} where {0,y,,y} contains k copies of y, then recurse on Y.
DW
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.