একটি সেট একটি পার্টিশন প্রতিনিধিত্ব করার জন্য একটি কমপ্যাক্ট উপায় কি?


11

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

কোনও সেটের বিভাজন উপস্থাপনের জন্য স্থান-দক্ষ উপায় কী?

এখানে একটি সম্ভাব্য সূচনা পয়েন্ট:

আমি জানি যে পার্টিশন সংখ্যা সঙ্গে একটি সেট উপাদান , -th বেল সংখ্যা । সুতরাং উপাদানগুলির সাথে একটি সেটের বিভাজন উপস্থাপনের জন্য অনুকূল স্থান জটিলতা বিট। এই জাতীয় উপস্থাপনাটি খুঁজতে, আমরা ( উপাদানগুলির একটি পার্টিশনের পার্টিশনের সেট ) এবং ( থেকে এর পূর্ণসংখ্যার সেট) এর মধ্যে এক থেকে এক ম্যাপিং সন্ধান করতে ।বি এন এন এন লগ 2 ( বি এন ) এন 1 বি এনNBNNNlog2(BN)N1BN

এমন কোনও ম্যাপিং রয়েছে যা গণনা করার পক্ষে দক্ষ? কি আমি "দক্ষ" দ্বারা মানে আমি থেকে / এই কম্প্যাক্ট প্রতিনিধিত্ব রূপান্তর করতে চান একটি সহজ-থেকে-নিপূণভাবে সময় বহুপদী (যেমন তালিকার একটি তালিকা হিসাবে) উপস্থাপনা বা ।লগ 2 ( বি এন )Nlog2(BN)


ভাবছেন, কতটা নির্দোষ / প্রাকৃতিক এনকোডিং হতে পারে কেবলমাত্র সেটের প্রতিটি উপাদানকে অনন্য পূর্ণসংখ্যার নির্ধারণের যেখানে ইন্টিজারটি পার্টিশন # প্রতিনিধিত্ব করে? হতে পারে এটি "এতটা পার্থক্য নয়" ...log2(BN)
vzn

উত্তর:


7

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

Bn+1=k=0n(nk)Bk.
n+1nk(nnk)=(nk)Bk

এটি ব্যবহার করে, আমরা যে কোনও বিভাজনকে মধ্যে একটি সংখ্যায় রূপান্তর করতে একটি পুনরাবৃত্ত আলগোরিদিম দিতে পারি । আমি অনুমান আপনি ইতিমধ্যে আকারের একটি উপসেট রূপান্তর একটি উপায় আছে এর সীমার মধ্যে একটি সংখ্যা (যেমন একটি অ্যালগরিদম পাস্কালের পুনরাবৃত্তি ) ব্যবহার করে একই পদ্ধতিতে পরিকল্পনা করা যেতে পারে ।n+10,,Bn+11k{1,,n}0,,(nk)1(nk)=(n1k)+(n1k1)

ধরা যাক যে অংশে রয়েছে অন্যান্য উপাদান রয়েছে । তাদের কোডটি । Range of এর একটি পার্টিশনটি সেই সমস্ত উপাদানকে "সঙ্কুচিত" করে গণনা করুন । Recursively এটির কোড গনা । নতুন কোডটি হলn+1kC1{1,,nk}C2

C=l=0nk1(nl)Bl+C1Bnk+C2.

অন্য দিকে, একটি কোড , অনন্য মতো সন্ধান করুন এবং যেহেতু , এটা হিসেবে লেখা যেতে পারে , যেখানে । এখন অংশটি এমন কোড করে এবং of এর কোড করেCk

l=0nk1(nl)BlC<l=0nk(nl)Bl,
C=Cl=0nk1(nl)Bl.
0C<(nk)BnkC1Bnk+C20C2<BnkC1n+1C2{1,,nk}, যা পুনরাবৃত্তভাবে ডিকোড করা যায়। ডিকোডিংটি সম্পূর্ণ করার জন্য, আপনাকে পরবর্তী পার্টিশনটি "সঙ্কুচিত" করতে হবে যাতে এতে থাকা অংশে উপস্থিত সমস্ত উপাদান উপস্থিত থাকে ।n+1


এখানে কিভাবে একই কৌশল ব্যবহার করার জন্য একটি উপসেট এনকোড হয় এর আকারের , যাও recursively। যদি তবে কোডটি , সুতরাং ধরুন । যদি then থাকে তবে of এর সাইজের এর উপসেট হিসাবে of এর কোড হতে দিন ; কোড হয় । যদি ; এর সাইজের এর একটি উপসেট হিসাবে তবে কে কোড হতে দিন ; এর কোডS{1,,n}kk=00k>0nSC1S{n}k1{1,,n1}SC1nSC1Sk{1,,n1}Sহয় ।C1+(n1k1)

একটি কোড ডিকোড করার জন্য , দুটি ক্ষেত্রে আছে। যদি তারপর ডিকোড একটি উপসেট এর আকারের যার কোড হল , এবং আউটপুট । অন্যথায়, সাইজের of এর একটি উপসেট ডিকোড করুন যার কোড , এবং আউটপুট ।CC<(n1k1)S{1,,n1}k1CS{n}S{1,,n1}kC(n1k1)S


দুর্দান্ত উত্তর; ধন্যবাদ. ক্ষুদ্র বাগ: উপরের পুনরাবৃত্তি সূত্রের জন্য প্রমাণ স্কেচে, আমি মনে করি আপনি কি বলতে চান "আছে যারা" এর পরিবর্তে "আছে সেই" - তারপর অবশিষ্ট উপাদানের মধ্যে বিভক্ত করা যেতে পারে উপায়ে । nkkkBk
cberzan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.