একটি "বাছাই" অ্যালগরিদম যা মুদ্রা-ফ্লিপ তুলক ব্যবহার করার সময় একটি এলোমেলোভাবে পারমিটেশন দেয়?


9

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

তুলনা ভিত্তিক বাছাই করা অ্যালগরিদম আছে যা তুলনা করে আমাদের বাস্তবায়নের উপর নির্ভর করে:

  1. সত্য তুলনাকারী ব্যবহার করার সময় উপাদানগুলিকে সাজানো ক্রমে ফিরিয়ে দিন (অর্থাত্ তুলনাটি আমরা একটি স্ট্যান্ডার্ড বাছাই অ্যালগরিদমে যা প্রত্যাশা করি তা করে)
  2. যখন তুলনাকারী একটি ন্যায্য মুদ্রা ফ্লিপ দ্বারা প্রতিস্থাপন করা হয় তখন উপাদানগুলির একটি অভিন্ন র্যান্ডম ক্রিয়াকলাপ প্রদান করুন ( x < y = trueঅর্থাত্, x এবং y এর মান নির্বিশেষে সম্ভাবনা ১/২ দিয়ে ফিরে আসা)

বাছাই করা অ্যালগরিদমের কোড অবশ্যই একই হতে হবে। এটি কেবলমাত্র "ব্ল্যাক বক্স" তুলনার অভ্যন্তরের কোড যা পরিবর্তনের অনুমতি রয়েছে।



2
আরও দেখুন নিম্নলিখিত মজার প্রশ্ন: cstheory.stackexchange.com/questions/5321/...
যুবাল ফিল্মাস

1
আপনি কি চান আপনার এলোমেলো তুলনাটি ভাল আচরণ করা উচিত? এখানে দুটি সম্ভাব্য উপায় রয়েছে। (1) একবার তুলনাকারী তার মনে আপ করে যেx<yতাহলে x<y সর্বদা এবং এছাড়াও y>x। (2) একই, তবে আরও যদি তুলনাকারী সিদ্ধান্ত নেয়x<y এবং y<z, তারপর এটি প্রতিশ্রুতিবদ্ধ x<z (এবং z>x)। উভয় ক্ষেত্রেই, প্রতিটি অনিয়ন্ত্রিত ক্যোয়ারী এখনও সম্পূর্ণ এলোমেলো।
যুবাল ফিল্মাস

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

1
সুন্দর দর্শন জন্য এখানে দেখুন ।
রাফেল

উত্তর:


3

নিম্নলিখিত ডিটারমিনিস্টিক (তুলনামূলক ছাড়াই) অ্যালগোরিদম একটি ইনপুট টিপল জন্য কাজ করে (a1,,an):

  1. কিছু স্থির জুটির সাথে আপনার তুলনাকারী ব্যবহার করে ফিশার-ইয়েটস পরিবর্তন করুন saya1<a2) একটি কয়েন ফ্লিপ হিসাবে (গ্রহণযোগ্যতা-প্রত্যাখ্যান নমুনা করছেন)। তুলনামূলক আউটপুট হলে1 প্রথমবার, ডিটারমিনিস্টিক ক্ষেত্রে একটি অন্তহীন প্রত্যাখ্যান লুপ এড়াতে এটি উল্টানো ব্যবহার করুন।
  2. (alচ্ছিক গতিসম্পন্ন: একক জোড়া চেষ্টা করুন) n বার, যেখানে nদৈর্ঘ্য বা আপনার ইনপুট। যদি ফলাফলগুলির মধ্যে দুটি ভিন্ন হয় তবে (1) এ প্রাপ্ত অনুমানটি ফেরত পাঠান
  3. মার্জ বাছাই করে আপনার অ্যারে বাছাই করুন।

তুলনামূলক হিসাবে একটি ডিস্ট্রিমেন্টিক অর্ডার সম্পর্ক দেওয়া এই অ্যালগরিদম সময় একটি অ্যারে বাছাই O(nlogn) যেহেতু ফিশার-ইয়েটস এলোমেলো চলছে O(n) সর্বাধিক ব্যবহার O(logn)ননর্যান্ডম "এলোমেলো বিটস" (যেমন আপনার তুলনামূলককে কল করে) প্রতিটি ধাপে এবং মার্জ সাজানোর ক্ষেত্রে একই অ্যাসিপটোটিক জটিলতা রয়েছে। (1) এর ফলাফলটি এক্ষেত্রে সম্পূর্ণ অকেজো, তবে যেহেতু এটি একটি বাস্তব ধরণের দ্বারা অনুসরণ করা হয়, এটি কোনও ক্ষতি করে না।

তুলনাকারী হিসাবে একটি বাস্তব মুদ্রা ফ্লিপ দেওয়া (1) প্রতিটি অনুমানের জন্য সমান সম্ভাবনা সহ অ্যারেটিকে অনুমতি দেয় এবং যদি আপনাকে সত্যিই করতে হয় (3) (আপনি বাদ দিয়েছিলেন (2) বা (2) এলোমেলোতা নির্ধারণ করতে ব্যর্থ হয়েছে), এটি কোনও নয় ক্ষতি হ'ল কারণ এর ফলাফলের বিতরণ কেবলমাত্র তার ইনপুটের ক্রমের উপর নির্ভর করে যা (1) এর কারণে সমস্ত অনুক্রমের মধ্যে অভিন্নভাবে বিতরণ করা হয়, সুতরাং পুরো অ্যালগরিদমের ফলাফলটিও অভিন্নভাবে বিতরণ করা হয়। প্রতিটি গ্রহণযোগ্যতা-প্রত্যাখ্যান স্যাম্পলিংয়ের যে পরিমাণ পুনরাবৃত্তি করতে হবে তার পরিমাণ জ্যামিতিকভাবে বিতরণ করা হয় (সম্ভাব্যতার সাথে প্রত্যাখ্যান করুন)<12) এবং সুতরাং এটির একটি প্রত্যাশিত মান রয়েছে <2। প্রতিটি পুনরাবৃত্তি সর্বাধিক ব্যবহার করেlognবিট, তাই রানটাইম বিশ্লেষণ নির্ণায়ক ক্ষেত্রে হিসাবে প্রায় একই, কিন্তু আমরা শুধুমাত্র একটি পেতে প্রত্যাশিত রানটাইম এরO(nlogn), অবিচ্ছিন্নতার সম্ভাবনা সহ (কেবলমাত্র নিশ্চিতভাবেই শেষ হবে )।


জো যেমন উল্লেখ করেছে: আপনি যদি প্রথম বিটের জন্য (1) পরীক্ষা পছন্দ না করেন, (3) তারপর (1) করুন এবং ব্যবহার করুন an<a1 যা সর্বদা হয় 0, যেহেতু অ্যারে ইতিমধ্যে ডিস্ট্রিমেন্টিক ক্ষেত্রে সাজানো হয়েছে। অতিরিক্তভাবে আপনাকে লুপের রেঞ্জের উপরের সীমানা থেকে আপনার এলোমেলো সংখ্যাটি বিয়োগ করতে হবে কারণ এলোমেলো সংখ্যার জন্য উপরের সীমাটি অভিন্ন ক্রিয়াকলাপ দেয়। তবে জেনে রাখুন যে (২) তখন নিষিদ্ধ, কারণ মুক্তিপণের ক্ষেত্রে আপনাকে সর্বদা রদবদল করতে হবে।


এমনকি আপনার তুলনামূলককে (1) এবং (3) এর জন্য একই কলগুলি ব্যবহার করতে পারেন, তবে তারপরে প্রমাণিত যে ফলাফলটি সমানভাবে বিতরণ করা হয়েছে, যদি তা সম্ভব হয় তবে কমপক্ষে আরও বেশি শক্ত।


নিম্নলিখিত অ্যালগরিদম এলোমেলো এবং সাজানোর জন্য কোন পৃথক পর্যায় নেই, তবে asyptotically ধীর। এটি মূলত বাইনারি অনুসন্ধানের সাথে সন্নিবেশ অনুসারে সাজানো । আমি ব্যবহার করা হবেa=(a1,,an) ইনপুট বোঝাতে এবং bk=(bk,1,,bk,k) এর পরে ফলাফল বোঝাতে kচতুর্থ রাউন্ড:

  1. সেট b1,1=a1
  2. যদি a2<a1 তারপর b2=(a2,a1) এবং (c,d):=(2,1) আর b2=(a1,a2) এবং (c,d):=(1,2)। উভয় ক্ষেত্রেad<ac সবসময় হতে হবে 0 (যেমন মিথ্যা) একটি ননরানডম তুলনাকারীর জন্য।
  3. অর্জন bk জন্য k3 প্রাপ্ত bk1 প্রথম।
  4. দিন l=log2k এবং k=2lঅর্থাৎ k এর সর্বনিম্ন শক্তি 2 এর চেয়ে ছোট নয় k
  5. দিন i0=0। প্রত্যেকের জন্যj{1,,l} দিন
    ij={ij1+2ljij1+2lj>k1ad<acij1ij1+2lj>k1¬(ad<ac)ij1+2ljij1+2ljk1bk1,ij1+2lj<akij1ij1+2ljk1¬(bk1,ij1+2lj<ak)
  6. যদি il>k পুনরাবৃত্তি (5.) bk=(bk1,1,,bk1,il1,ak,bk1,il,,bk1,k1)
  7. আউটপুট bn

এলোমেলো ক্ষেত্রে: 5 + এর cla ধারাটি মূলত গ্রহণযোগ্যতা-প্রত্যাখ্যানের নমুনা। বাকি অ্যালগরিদম একটি নিষ্পাপ শ্যাফেল: প্রথমটি সাফ করুনk1 উপাদান এবং যোগ করুন kসমান সম্ভাবনা সহ প্রতিটি পজিশনে তম উপাদান। যদি আমরা সাধারণ সন্নিবেশ সাজান ব্যবহার করি তবে আমরা পরিবর্তে দ্বিপদী বিতরণ করব।

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


@ জো আপনি কীভাবে আপনার সমস্ত পয়েন্টকে বর্তমান আকারে পোস্টের জন্য বৈধ রেখেছেন একটি মন্তব্যে রেখে বাকীটি মুছতে পারেন?
ফ্রেফল

আমি এমন একটি অ্যালগোরিদমের জন্য আশা করছিলাম যা তুলনামূলক ব্যবহৃত হয় তার উপর নির্ভর করে বিভিন্ন পদক্ষেপগুলি করে না। তুলনামূলককে অনুসন্ধান না করে আপনি কি অসীম প্রত্যাখ্যান-লুপ এড়াতে পারবেন? আমি মনে করি আপনি প্রথমে পদক্ষেপ (3) সম্পাদন করে প্রত্যাখ্যান এড়াতে পারবেন ...
জো

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

প্রথম মন্তব্য: নোট করুন যে আমি সেই প্রথম নমুনা বিটটি ফেলে দিই না, এটি "দ্বৈত ব্যবহার"। আমি প্রতি 2 বিট বিপরীত সম্পর্কে চিন্তা করেছিলাম, কিন্তু এটি অন্তহীন লুপ প্রতিরোধ করবে না। আসলে কিছু অনিয়মিত প্যাটার্ন প্রয়োজন এবং এমনকি আরও অনেক এন্ট্রি প্রত্যাখ্যান করতে পারে। অবশ্যই আমি প্রথম এবং অতি সাম্প্রতিকতম দুটি বিটের পরিবর্তে দুটি সাম্প্রতিক বিটগুলি এক্সওর করতে পারি, তবে এটি আসলে আলাদা নয়।
ফ্রেফল

দ্বিতীয় মন্তব্য: (1) বনাম (3) আদেশটি কেবলমাত্র গুরুত্বপূর্ণ যদি আপনি পদক্ষেপ (2) ব্যবহার করেন, কারণ এলোমেলো ক্ষেত্রে আপনাকে নিশ্চয়তা দিতে হবে যে সাফল্য 1 দিয়ে সম্পন্ন হয়েছে অন্যথায় ইউনিফর্ম বিতরণ লঙ্ঘিত হবে। কেন এটি নির্ভর করেi? এক্ষেত্রেan<a1 সর্বদা উত্তর দেবে 0যা আমাদের প্রয়োজন।
ফ্রেফএল

4

না, এটি অসম্ভব যদি না হয় n2। এলোমেলো কম্পেটার ব্যবহার করে আপনার অ্যালগরিদম দ্বারা ক্রমুটিশন উত্পন্ন হওয়ার সম্ভাবনা হ'ল ডায়াডিক, ফর্মেরA/2Bসম্ভাবনা হওয়া উচিত 1/n!। কখনn>2, লেখার কোনও উপায় নেই 1/n! ওইরূপে থাকা A/2B


1
তবে এটি কেবল আমাদের হাতে আছে, যদি রানটাইমের উপর একটি ডিস্টিমানস্টিক আবদ্ধ প্রয়োজন, যা প্রশ্নে অনুরোধ করা হয়নি। আমাদের যদি কেবল প্রত্যাশিত রানটাইম সসীম হওয়ার প্রয়োজন হয় তবে এটি কোনও সমস্যা হওয়া উচিত না।
ফ্রেফএল

1
আপনি কি এমন কোনও যুক্তিসঙ্গত বাছাই অ্যালগরিদম সম্পর্কে অবগত আছেন যা বহুকালীন সময়ে শেষ হয় না?
যুবাল ফিল্মাস

2
আপনি নির্জনবাদী এবং এলোমেলো ক্ষেত্রে মিশ্রিত করুন। অ্যালগরিদম ডিস্ট্রিমেন্টিক পলিনোমাল সময়তে ডেট্রিমিনিস্টিক অর্ডার রিলেশন এবং প্রত্যাশিত বহুবর্ষীয় সময়ে যদি মুদ্রাকে তুলনাকারী হিসাবে ডাকা হয় বলা যেতে পারে।
ফ্রেফএল

@ ইউভালফিল্মাস কেন সিদ্ধান্ত গাছের কাছে থাকতে হবে 2kপাতার?
জো

যদি আপনি কাজ করছেন kমোট তুলনা, তারপরে যে কোনও ইভেন্টের সম্ভাবনা ফর্ম হতে চলেছেA/2k। এটি পাতার সংখ্যা সম্পর্কে নয়। বাহিরের একমাত্র উপায় হ'ল ফ্রেফল সূচিত হিসাবে, সীমাহীন সংখ্যার তুলনা।
যুবাল ফিল্মাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.