লোড পাশা জন্য ডেটা কাঠামো?


130

মনে করুন যে আমার কাছে এন-পার্শ্বযুক্ত লোডড ডাই রয়েছে যেখানে প্রতিটি পাশের কে-তে যখন এটি ঘূর্ণায়মান হয় তখন কিছুটা সম্ভাবনা থাকে k আমি এই তথ্যটি স্ট্যাটিক্যালি স্টোর করার জন্য ভাল অ্যালগরিদম থাকলে (অর্থাত্ সম্ভাব্যতার একটি নির্দিষ্ট সেটের জন্য) যাতে আমি ডাইয়ের এলোমেলো রোলটি দক্ষতার সাথে তৈরি করতে পারি তবে আমি আগ্রহী।

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

এই রানটাইমটিতে কোনওভাবে "অভিযোজিত" এমনভাবে কীভাবে এই সমস্যার সমাধান করবেন তার জন্য কারও কি কোনও পরামর্শ আছে?

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


2
এটি যুক্তিসঙ্গত যে প্রতিটি নির্দিষ্ট ক্ষেত্রে একটি ও (1) সমাধান রয়েছে ।
টিম

উত্তর:


117

আপনি একটি উপ-পদ্ধতিটির সন্ধান করছেন যা একটি নির্দিষ্ট সময়সীমার সম্ভাবনা বন্টন (ধ্রুবক সময়ে দৈর্ঘ্যের একটি অ্যারেতে আপনি প্রবেশাধিকার অ্যাক্সেস করতে পারবেন) একসময়ের ও (এন) সেটআপের সাহায্যে একটি ও (1) পদ্ধতি সরবরাহ করে provides । আপনি এটা মধ্যে নথিভুক্ত জানতে পারেন অধ্যায় 3 (পিডিএফ) এর "অ-ইউনিফর্ম এলোমেলো Variate প্রজন্ম" লুক Devroye দ্বারা।

ধারণা সম্ভাব্যতা P আপনার অ্যারের নিতে হয় এবং তিনটি নতুন এন-উপাদান অ্যারে এবং q উত্পাদন , একটি , এবং খ । প্রতিটি q কে 0 এবং 1 এর মধ্যে একটি সম্ভাবনা এবং প্রতিটি এবং বি কে 1 এবং n এর মধ্যে একটি পূর্ণসংখ্যা হয়।

আমরা 1 এবং n এর মধ্যে 0 এবং 1 এর মধ্যে দুটি র্যান্ডম সংখ্যা, r এবং s তৈরি করে এলোমেলো সংখ্যা তৈরি করি Let i = মেঝে (r * N) +1 করা যাক। যদি q i <s হয় তবে একটি i ফেরান b i । ওরফে পদ্ধতিতে কাজটি কী কী , কে , কে এবং বি কে তৈরি করতে পারে তা নির্ধারণ করে ।


যেমন একটি দরকারী অ্যালগরিদমের জন্য, Alias ​​পদ্ধতি আশ্চর্যজনকভাবে খুব সুপরিচিত নয়।
মুহম্মে

রেকর্ডের জন্য আমি প্রকাশিত র্যান্ডম স্যাম্পলিং ওরফে পদ্ধতি ব্যবহার করে জন্য একটু C লাইব্রেরি apps.jcns.fz-juelich.de/ransampl
জোচিম ডব্লিউ

1
ওরফে পদ্ধতি একটি নির্দিষ্ট বাস্তবায়ন ধীর তারপর যেমন রুলেট চাকা যেমন খারাপ সময় জটিলতা সঙ্গে একটি পদ্ধতি হতে পারে একটি প্রদত্ত জন্য nএবং র্যান্ডম সংখ্যার একটি নির্বাচিত সংখ্যা ধ্রুবক আলগোরিদিম বাস্তবায়নে জড়িত কারণে উৎপন্ন করে।
jfs

4

ভারসাম্য বাইনারি অনুসন্ধান গাছ (বা একটি অ্যারেতে বাইনারি অনুসন্ধান) ব্যবহার করুন এবং ও (লগ এন) জটিলতা পান। প্রতিটি ডাই রেজাল্টের জন্য একটি নোড রাখুন এবং কীগুলি হ'ল অন্তরাল যা ফলাফলটি ট্রিগার করবে।

function get_result(node, seed):
    if seed < node.interval.start:
        return get_result(node.left_child, seed)
    else if seed < node.interval.end:
        // start <= seed < end
        return node.result
    else:
        return get_result(node.right_child, seed)

এই সমাধানটি সম্পর্কে ভাল বিষয়টি এটি কার্যকর করা খুব সহজ তবে এখনও ভাল জটিলতা রয়েছে।


উপরের মতো হাতে তৈরি বাইনারি গাছ প্রয়োগ করা সহজ তবে এটি ভারসাম্যহীন নয়
ইউসুং

আপনি গ্যারান্টি দিতে পারেন যে আপনি যদি এটি সঠিক ক্রমে তৈরি করেন তবে এটি ভারসাম্যপূর্ণ।
hugomg

3

আমি আপনার টেবিলটি দান করার কথা ভাবছি।

প্রতিটি ডাই ভ্যালুতে ক্রমযুক্তের সাথে একটি টেবিল না রেখে আপনি দৈর্ঘ্যের এক্সএন এর একটি পূর্ণসংখ্যা অ্যারে তৈরি করতে পারেন, যেখানে সম্ভাব্যতার নির্ভুলতা বাড়াতে এক্স আদর্শভাবে একটি উচ্চ সংখ্যা।

এই অ্যারেটিকে ইনডেক্সটি (এক্সএন দ্বারা সাধারণীকরণের) ক্রমবর্ধমান মান হিসাবে ব্যবহার করুন এবং অ্যারেতে প্রতিটি 'স্লটে', এই সূচকটি উঠে এলে ডাইস রোল রোল সংরক্ষণ করুন।

সম্ভবত আমি একটি উদাহরণ দিয়ে আরও সহজ ব্যাখ্যা করতে পারে:

তিনটি পাশা ব্যবহার: পি (1) = 0.2, পি (2) = 0.5, পি (3) = 0.3

একটি অ্যারে তৈরি করুন, এই ক্ষেত্রে আমি একটি সহজ দৈর্ঘ্য বেছে নেব, 10 বলুন (যা, x = 3.33333)

arr[0] = 1,
arr[1] = 1,
arr[2] = 2,
arr[3] = 2,
arr[4] = 2,
arr[5] = 2,
arr[6] = 2,
arr[7] = 3,
arr[8] = 3,
arr[9] = 3

তারপরে সম্ভাব্যতা পেতে, কেবল 0 এবং 10 এর মধ্যে একটি সংখ্যা এলোমেলো করে কেবল সেই সূচকটি অ্যাক্সেস করুন।

এই পদ্ধতিটি নির্ভুলতা আলগা করতে পারে, তবে এক্স এবং নির্ভুলতা বৃদ্ধি যথেষ্ট হবে।


1
সম্পূর্ণ নির্ভুলতার জন্য আপনি প্রথম পদক্ষেপ হিসাবে অ্যারে লুকোচুরি করতে পারেন এবং একাধিক পক্ষের সাথে মিলিত অ্যারে অন্তরগুলির জন্য সেখানে অনুসন্ধান করতে পারেন।
aaz

1

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

কাস্টম ওজন ফাংশন সহ পূর্ণসংখ্যা চয়ন করার সহজতম উপায়গুলির মধ্যে একটি f(x)হল প্রত্যাখ্যানের নমুনা পদ্ধতি। নিম্নলিখিতটি সর্বাধিক সম্ভাব্য মান fহ'ল max। প্রত্যাখ্যানের নমুনা নেওয়ার সময়ের জটিলতা গড়পড়তা স্থিতিশীল, তবে এটি বিতরণের আকারের উপর নির্ভর করে এবং চিরকাল চলার সবচেয়ে খারাপ পরিস্থিতি রয়েছে। kপ্রত্যাখ্যানের নমুনা ব্যবহার করে [1, ] তে পূর্ণসংখ্যা চয়ন করতে :

  1. i[1, k] এ একটি অভিন্ন র্যান্ডম পূর্ণসংখ্যা চয়ন করুন ।
  2. সম্ভাবনা সহ f(i)/max, ফিরে i। অন্যথায়, পদক্ষেপ 1 এ যান।

অন্যান্য অ্যালগরিদমের গড় স্যাম্পলিং সময় থাকে যা বিতরণের উপর এতটা নির্ভর করে না (সাধারণত ধ্রুবক বা লোগারিদমিক হয়) তবে প্রায়শই আপনাকে একটি সেটআপ ধাপে ওজনকে প্রাক্কলিতকরণ এবং ডেটা কাঠামোতে সেগুলি সংরক্ষণের প্রয়োজন হয়। এগুলির মধ্যে কয়েকটি গড় হিসাবে তারা এলোমেলো বিটগুলি ব্যবহার করে সংখ্যার দিক থেকেও অর্থনৈতিক। এই অ্যালগরিদমগুলির অনেকগুলি ২০১১ সালের পরে প্রবর্তিত হয়েছিল এবং সেগুলির মধ্যে রয়েছে:

  • দ্য লভেনম্যান – লারসন সুসিনেক্ট ডেটা স্ট্রাকচার ("সুস্পিনেক্ট নমুনা বিতরণ থেকে নমুনা", ২০১২),
  • ইউনপেং টাংয়ের বহু-স্তরের অনুসন্ধান ("ডিস্ক্রিট ডিস্ট্রিবিউশনগুলি পরিবর্তনের জন্য র্যান্ডম স্যাম্পলিং পদ্ধতিগুলির একটি এম্পিরিকাল স্টাডি", 2019) এবং
  • ফাস্ট লোড পাশা রোলের (2020)।

অন্যান্য অ্যালগরিদমগুলির মধ্যে উপনাম পদ্ধতি (ইতিমধ্যে আপনার নিবন্ধে উল্লিখিত), নথ – ইয়াও অ্যালগরিদম, এমভিএন ডেটা স্ট্রাকচার এবং আরও অনেক কিছু অন্তর্ভুক্ত রয়েছে। জরিপের জন্য আমার বিভাগ " ওজনযুক্ত চয়েস অ্যালগরিদমে একটি নোট " দেখুন ।

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