মাল্টিসেটের সংখ্যা যেমন 1 থেকে


11

আমার সমস্যা. দেওয়া , আমি বৈধ মাল্টিস্টেট এর সংখ্যা গণনা করতে চাই । একটি মাল্টিসেট যদি বৈধ হয়n এস এসnSS

  • উপাদানের সমষ্টি হল , এবংএস এনSn
  • 11 থেকে n পর্যন্ত প্রতিটি সংখ্যা এসn এর কয়েকটি উপাদানের যোগফল হিসাবে স্বতন্ত্রভাবে প্রকাশ করা যেতে পারে ।S

উদাহরণ। উদাহরণস্বরূপ, যদি এন = 5n=5 তারপর { 1 , 1 , 1 , 1 , 1 } , { 1 , 2 , 2 } , { 1 , 1 , 3 }{1,1,1,1,1},{1,2,2},{1,1,3} বৈধ।

যাইহোক, এস = { 1 , 1 , 1 , 2 }S={1,1,1,2} অবৈধ কারণ 2 দ্বারা গঠিত হতে পারে উভয় { 1 , 1 }{1,1} এবং { 2 }{2} (অর্থাত, 2 হিসাবে প্রকাশ করা যেতে পারে উভয় 2 = 1 + + 12=1+1 এবং 2 = 22=2 ) , সুতরাং দ্বিতীয় শর্তটি ধরে রাখে না। একইভাবে 3 দ্বারা গঠিত হতে পারে { 2 , 1 }{2,1} এবং { 1 , 1 , 1 }{1,1,1}

এস = { 1 , 2 , 4।S={1,2,4 এছাড়াও অবৈধ কারণ 11 থেকে 5 পর্যন্ত সমস্ত সংখ্যা5স্বতন্ত্রভাবে তৈরি করা যায় তবে এস এর উপাদানগুলির যোগফল 5S হয় না।5


আমি বেশ কিছুদিন ধরে এই সমস্যার জন্য একটি ভাল অ্যালগরিদম সন্ধান করার চেষ্টা করেছি কিন্তু এটি সমাধান করতে পারছি না। এটা কোডেক থেকে । আমি জমা দেওয়া কয়েকটি সমাধান দেখেছি তবে আমি এখনও সমস্যার সমাধানের যুক্তিটি পেতে পারি নি। দ্রষ্টব্য: প্রশ্নের সময়সীমা 10 সেকেন্ড এবং এন < 10 9n<109

একটি মাল্টিসেটের জন্য আমি স্বরলিপি এস = { ( একটি 1 , সি 1 ) , ( একটি 2 , সি 2 ) ব্যবহার করব } a i < a j if i < j , যার অর্থ একটি i ঘটে c আমি বারবার মাল্টিসেট এস এS={(a1,c1),(a2,c2)...} ai<aji<jaici

এখনও অবধি আমি কিছু উপসংহার টেনেছি

  • প্রয়োজনীয় বাছাই করা মাল্টিসেটের প্রথম উপাদানটি 1 হওয়া উচিত1
  • যাক এস = { 1 , একটি 2একটি } | a 1a 2a k তখন দুটি বৈশিষ্ট্য অনুসরণ করে একটি সেট হবে r < k a r + 1 = a r  বা  ( r i = 0 a i ) + 1S={1,a2ak}|a1a2ak  r<k  ar+1=ar or (ri=0ai)+1
  • যাক এস = { ( 1 , 1 ) , ( একটি 2 , 2 ) ( একটি , ) } | একটি 1একটি 2একটি , যেখানে একটি আমি ঘটছে আমি বার উপরে উপসংহার আমরা বলতে পারি যে থেকে তারপর প্রয়োজনীয় বৈশিষ্ট্য অনুসরণ করে আমি একটি আমি | n + 1 এবংS={(1,c1),(a2,c2)(ak,ck)}|a1a2akaici i ai|n+1a i | a j if j > i । প্রুফ: a i + 1 = ( a i c i + a i - 1 ) + 1 a i | a i + 1ai|ajj>i
    ai+1=(aici+ai1)+1ai|ai+1
  • এখন এস = { 1 , 1 1 ডি - 1 , ডি , ডি ডি , ডি এম 1 , ডি এম 1ডি এম 1 , ডি এম 2 , ডি এম 2ডি এম 2 , } অর্থাৎ সমস্তগুলি বিবেচনা করুন 1 পরে পরবর্তী সংখ্যাগুলি d এর একাধিক হবে । সুতরাং ( এন ) যাকS={1,11d1,d,dd,dm1,dm1dm1,dm2,dm2dm2,}df(n)এই জাতীয় মাল্টিসেটের গণনা হতে পারে তবে f ( n ) = d | n + 1 , d 1 f ( n - ( d - 1 )d )যেখানে আমি সম্ভাব্য সংখ্যার1s(=d-1)এরসংখ্যার উপরে যোগ করছি। অন্য পদগুলিতেf(n-1)=g(n)=d| n,dng(d)f(n)=d|n+1,d1f(n(d1)d)1s=d1f(n1)=g(n)=d|n,dng(d)

অবশেষে আমার সমস্যা এটিতে হ্রাস পেয়েছে - একটি কার্যকর উপায়ে g ( n ) সন্ধান করুন যাতে এটি সময়ের সীমা অতিক্রম না করে।g(n)


2
অনুশীলন সমস্যাগুলির জন্য সমাধান এবং অ্যালগরিদমগুলি প্রকাশ্যে পোস্ট করার জন্য অন্য ব্যক্তির কাছে জিজ্ঞাসা করা কি উপযুক্ত তা আপনি পরীক্ষা করেছেন? কোডেফ এফএকিউ প্রত্যাশিত বলে মনে হচ্ছে যে সমাধানগুলি প্রকাশ্যে পোস্ট করা হবে না (কিছু খুব প্রাথমিক সমস্যা বাদে)। এখানে কোনও সমাধান পোস্ট করা অন্যের অনুশীলনের সমস্যাগুলিকে "নষ্ট" করে দেবে, নাকি এটিকে ঠিক বলে বিবেচিত হবে? আমি কোডেফ সম্প্রদায়ের নিয়ম এবং শিষ্টাচারের সাথে পরিচিত নই।
DW

আমি প্রায়শই জিজ্ঞাসিত প্রশ্নাবলীতে পাবলিক ডোমেনে প্রশ্ন পোস্ট না করার সম্পর্কিত কিছুই খুঁজে পাইনি এবং এই বিধিনিষেধটি অনুশীলন সমস্যা নয় বরং চলমান প্রতিযোগিতায় সমস্যা সম্পর্কিত।
ন্যায়বিচার লীগ

1
@ ডাব্লুডাব্লু আমি মনে করি না যে আমরা চলমান প্রতিযোগিতায় নেই এমন প্রবলগুলি নিয়ে আলোচনা করলে তারা কিছু মনে করবেন।
রবি উপাধ্যায়

1
আপনি ইনপুট সংখ্যার পার্টিশনের সংখ্যাটি সন্ধান করছেন। আমি আপনাকে এই বুজওয়ার্ডটি ব্যবহার করে কিছু গবেষণা করার পরামর্শ দিচ্ছি।
রাফেল

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

উত্তর:


2

দ্রুত সমাধানটি কী করছে তা এখানে । এটি প্রকৃতপক্ষে আপনার ফাংশন g ( n ) = d n d < n g ( d ) গণনা করছে ,g ( 1 ) = 1. প্রদত্ত এন , আমরা এটিকে ফ্যাক্টর করব (নীচে দেখুন) এবং তারপরে সমস্ত ফ্যাক্টরগুলি গণনা করুন (নীচে দেখুন) এফ 1 , , f মি কিছু ক্রমে যেমনi | f j বোঝায় i j (সম্পত্তি P)। আমরা এখনপ্রদত্ত ক্রমে উপাদানগুলির উপর দিয়ে সূত্র অনুসারে g গণনা করি। প্রপার্টি পি নিশ্চিত করে যে, আমরা যখন কম্পিউট( ) , আমরা ইতিমধ্যে নির্ণিত আছে( ) জন্য সমস্ত অ-তুচ্ছ কারণের

g(n)=dnd<ng(d),g(1)=1.
nf1,,fmfi|fjijgg(d)g(e)eof d । একটি অপ্টিমাইজেশনও রয়েছে (নীচে দেখুন)।d

আরো বিস্তারিত, আমরা অনুক্রমে কারণের উপর যেতে, এবং প্রতিটি ফ্যাক্টর জন্য আমি , আমরা চেক করে তার অ তুচ্ছ কারণের সব অনুসন্ধান যা 1 , ... , আমি - 1 ভাগ আমিfif1,,fi1fi

ফ্যাক্টরিং: প্রাক প্রসেসিং: আমরা ইরোটোস্টিনিস চালনী ব্যবহার করে 10 9 এর নীচে সমস্ত প্রাইমগুলির একটি তালিকা তৈরি করি । এন দেওয়া হয়েছে , আমরা কেবল পরীক্ষার বিভাগ ব্যবহার করি।109n

সমস্ত উপাদান তৈরি করা হচ্ছে: এটি পুনরাবৃত্তভাবে করা হয়। ধরা যাক এন = পি কে 1 1পি কে টি টি । আমরা টি নেস্টেড লুপগুলি l 1{ 0 , , k 1 } , , l t{ 0 , , k t } , এবং আউটপুট p l 1 1p l t t চালাই । আপনি সংশোধন করে সম্পত্তি পি প্রমাণ করতে পারেন।n=pk11pktttl1{0,,k1},,lt{0,,kt}pl11pltt

অপ্টিমাইজেশন: যেহেতু প্রোগ্রামটি বেশ কয়েকটি ইনপুটগুলিতে চালিত হয়, তাই আমরা বিভিন্ন ইনপুটগুলিতে সময় সাশ্রয় করতে স্মৃতিচারণ ব্যবহার করতে পারি। আমরা কেবলমাত্র ছোট মানগুলি মেমোয়েজ করি ( 10 5 অবধি ) এবং এটি আমাদেরকে সমস্ত অ্যারেমে মেমোজাইজড মান সংরক্ষণ করতে দেয়। অ্যারেটি জিরো দিয়ে শুরু করা হয়েছিল, এবং তাই আমরা বলতে পারি যে কোন মানগুলি ইতিমধ্যে পরিচিত (যেহেতু সমস্ত গণনা করা মানগুলি ধনাত্মক)।105


তাহলে প্রধানমন্ত্রী গুণকনির্ণয় এন + + 1 হয় পি 1 1 , ... , পৃঃ টি টি , তারপর ( এন ) শুধুমাত্র উপর নির্ভর করে ( 1 , ... , T ) , এবং আসলে শুধুমাত্র এই ভেক্টরের সাজানো সংস্করণ । 10 9 এর নীচে প্রতিটি সংখ্যায় সর্বাধিক 29 মূল কারণ রয়েছে (পুনরাবৃত্তি সহ), এবং যেহেতু পি ( 29 ) = 4565 , এটি গণনা করা সম্ভব বলে মনে হচ্ছেn+1pk11,,pkttf(n)(k1,,kt)10929p(29)=4565f(বা বরং ) তাদের সবার জন্য, পুনরাবৃত্তভাবে এই সমাধানটি যদি আরও বিভিন্ন ইনপুট থাকে তবে দ্রুত হতে পারে; যেমনটি রয়েছে, সেখানে সর্বোচ্চ 10 রয়েছেg10

এটিও সম্ভব যে সংশ্লিষ্ট জি- তে পার্টিশন ম্যাপ করার জন্য এই ফাংশনটির একটি স্পষ্ট বিশ্লেষণাত্মক ফর্ম রয়েছে। উদাহরণস্বরূপ, জি ( পি কে ) = 2 কে - 1 , জি ( পি 1পি টি ) A000670 দ্বারা দেওয়া হয়েছে , এবং জি ( পি 2 1 পি 2পি টি ) A005649 বা A172109 দ্বারা দেওয়া হয়েছে ।gg(pk)=2k1g(p1pt)g(p21p2pt)


1

ঠিক আছে, সুতরাং আপনার g ( ) (আপনার প্রশ্নের শেষ দেখুন ) এর সাথে পুনরাবৃত্তির সম্পর্ক রয়েছে ।g()

এই মুহুর্তে দেখে মনে হচ্ছে যে প্রাকৃতিক পদ্ধতির ক্ষেত্রে জি ( এন ) গণনা করার জন্য পুনরাবৃত্ত আলগোরিদিম লিখতে হবে এবং মেমোয়েজেশন প্রয়োগ করা হবে যাতে আপনি জি ( i ) একাধিকবার গণনা করবেন না । অন্য কথায়, যখন আপনি কম্পিউট সালে গ্রাম ( আমি ) , আপনি এটি একটি হ্যাশ টেবিল থেকে ম্যাপের সংরক্ষণ আমি ( আমি ) ; যদি আপনাকে জানতে হবে ( আমি ) ভবিষ্যতে আবার, আপনি এটি হ্যাশ টেবিল আপ সন্ধান করতে পারেন।g(n)g(i)g(i)ig(i)g(i)

এই ফ্যাক্টরিং প্রয়োজন নেই এন , কিন্তু ফ্যাক্টরিং জন্য দক্ষ আলগোরিদিম হয় এন যখন এন 10 9nnn109

এছাড়াও আপনি ক্রম খোঁজা পারে ( 1 ) , গ্রাম ( 2 ) , গ্রাম ( 3 ) , গ্রাম ( 4 ) , গ্রাম ( 5 ) , ... মধ্যে পূর্ণসংখ্যা ক্রম অন লাইন এনসাইক্লোপিডিয়া । যদি আপনি তাদের এনসাইক্লোপিডিয়ায় ক্রমটি সন্ধান করেন তবে কখনও কখনও তারা অতিরিক্ত সহায়ক তথ্য সরবরাহ করে (যেমন, সিক্যুয়েন্স গণনা করার জন্য দক্ষ অ্যালগরিদম)। যদিও এটি অবশ্যই মজাদার জিনিসগুলি বাইরে নিয়ে যেতে পারে।g(1),g(2),g(3),g(4),g(5),


0

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

আরও কিছু বিশদে বিশদ: ধরুন আপনার কাছে একটি মাল্টিসেট এস । একটি নম্বর দেওয়া আমি সঙ্গে 1 আমি এন , আপনি কিভাবে একটি submultiset সনাক্ত করতে পারেন এস যে অঙ্কের আমি ? সেই সাবমলিটসেট অনন্য কিনা আপনি কীভাবে পরীক্ষা করতে পারেন? পরিবর্তন করার জন্য মানক গতিশীল প্রোগ্রামিং কৌশলগুলি মানিয়ে নেওয়ার চেষ্টা করুন । ( এই প্রশ্নটি দেখুন ।)Si1inSi

একটি মাল্টিসেট এস দেওয়া , আপনি কীভাবে এটি দ্বিতীয় শর্তটি সন্তুষ্ট কিনা তা পরীক্ষা করে দেখতে পেলেন , অর্থাৎ 1 থেকে n পর্যন্ত প্রতিটি সংখ্যাকে এস এর সাবমলিটসেটের যোগ হিসাবে স্বতন্ত্রভাবে প্রকাশ করা যেতে পারে (অনন্য পরিবর্তন-শর্ত)? যদি আপনি আগেরটি সমাধান করেন তবে এটি বেশ সহজ হওয়া উচিত।SnS

দিন পি ( এন ) multisets আপনার অবস্থার উভয় সন্তুষ্ট তালিকা বোঝান। আপনি যদি পি ( 1 ) , পি ( 2 ) , , পি ( এন ) জানতেন তবে আপনি কীভাবে এই তথ্য পি ( এন + 1 ) তৈরি করতে ব্যবহার করতে পারেন ? এখানে আপনি সংখ্যার পার্টিশনগুলি গণনার জন্য মানক গতিশীল প্রোগ্রামিং কৌশলগুলি মানিয়ে নিতে চাইতে পারেন।P(n)P(1),P(2),,P(n)P(n+1)


এখানে একটি পদ্ধতির যা সম্ভবত আরও ভাল হবে's

ধরুন এস একটি মাল্টিসেট যা আপনার উভয় শর্তকে সন্তুষ্ট করে ( n এর জন্য )। আমরা একটি মাল্টিসেট টি পেতে কীভাবে এটি বাড়িয়ে দিতে পারি যার একটির আরও উপাদান থাকে? অন্য কথায়, কীভাবে আমরা সব পথ চিহ্নিত কাছে আরো একটি উপাদান যোগ করতে পারেন এস , একটি নতুন multiset পেতে টি উভয় আপনার অবস্থার সন্তুষ্ট (কিছু জন্য এন ' )?SnTSTn

উত্তরঃ যদি এক্স উপাদান কিছু একটা সমষ্টি হিসাবে প্রকাশ করা যেতে পারে এস , তারপর সেখানে এটি যোগ কোন বিন্দু এস যে কারণ হবে: টি স্বতন্ত্রতা শর্ত লঙ্ঘন করেছে বলে। সুতরাং, আমরা সব পূর্ণসংখ্যার গনা করতে এক্স যে করতে পারবে না উপাদান কিছু একটা সমষ্টি প্রকাশ করা এস ; প্রত্যেকটি এমন এক জিনিস যা একটি নতুন মাল্টিসেট টি পেতে সম্ভাব্যভাবে এস যুক্ত করা যেতে পারে যা উভয় শর্ত পূরণ করবে (অন্য কোনও এন এর জন্য )।xSSTxSSTn

তদুপরি, এটি অঙ্ক করা সম্ভব যে কোন পূর্ণসংখ্যার এস এর কয়েকটি উপাদানের যোগফল হিসাবে প্রকাশ করা যেতে পারে , এবং যা গতিশীল প্রোগ্রামিং ব্যবহার করে তা করতে পারে না। আপনি একটি দ্বি-মাত্রিক অ্যারে তৈরী একটি [ 1 ... | এস | , 1 ... এন ] Booleans, যেখানে একজন [ আমি , ] যদি পূর্ণসংখ্যা প্রকাশ করার একটি উপায় সত্য প্রথম কিছু একটা সমষ্টি হিসাবে আমি উপাদান এস (শুধুমাত্র প্রথম আমি উপাদান এস যোগ্য ব্যবহার করা হবে; যেখানে এসSA[1|S|,1n]A[i,j]jiSiSSবাছাই করা হয়েছে, সুতরাং এস = { এস 1 , এস 2 , , এস কে } এবং এস 1এস 2এস কে )। দ্রষ্টব্য যে A [ i , j ] A [ 1 i - 1 , 1 j - 1 ] এর মান ব্যবহার করে কম্পিউটিং করা যেতে পারে : বিশেষত, [ i , j ]S={s1,s2,,sk}s1s2skA[i,j]A[1i1,1j1]=A[i1,j]A[i1,jsi]A[i,j]=A[i1,j]A[i1,jsi] if j>sij>si, or A[i,j]=A[i1,j]A[i,j]=A[i1,j] otherwise. This enables us to identify all numbers that are candidates to be added to SS.

Next, for each candidate extension TT of SS (obtained by adding one element to SS), we want to check whether TT satisfies both conditions. Let nn denote the sum of elements of SS, and nn the sum of elements of TT. We need to check whether every integer in the range n+1,n+2,,nn+1,n+2,,n can be expressed as a sum of some of the elements of TT. This too can be solved using dynamic programming, using standard algorithms for change-making. (In fact, if you still have the array AA mentioned above you can easily extend it a little bit to solve this problem: we make it an array A[1|T|,1n]A[1|T|,1n], continue to fill in all of the additional entries, and make sure that A[|T|,n+1],A[|T|,n+2],,A[|T|,n]A[|T|,n+1],A[|T|,n+2],,A[|T|,n] are all true.) So, now we can enumerate all multisets TT that extend SS by a single element and that satisfy both conditions.

This immediately suggests an algorithm to enumerate all multisets S that satisfy your condition, for all n up to some bound, say n20. We'll have an array P[120], where P[5] stores all multisets S that sum to 5, and generally, P[n] stores the set of all multisets S that sum to n.

Next, we can fill in P[n] iteratively. Start by setting P[1] to contain just the one multiset {1}. Next, for each n (counting up from 1 to 20), for each SP[n], enumerate all possible extensions T of S (using the techniques above), let n denote the sum of the elements of T, and insert T into P[n] if it isn't already present and if n20.

This should be pretty doable. Good luck! Have fun! Working through the details will be a good learning-exercise in dynamic programming.


I cannot enumerate all the integer partitions because it will be exponential. I have edited the question and included the range of n and some of my thoughts but still I am stuck. May be you can help.
justice league
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.