সর্বাধিক দক্ষ ধ্রুবক-স্থান বাছাইকরণ অ্যালগরিদম কী?


19

আমি ইনট অ্যারেগুলির জন্য বাছাই করা অ্যালগরিদম খুঁজছি যা অ্যারের আকার ছাড়া অন্য কোনও বাইট বরাদ্দ করে না এবং দুটি নির্দেশে সীমাবদ্ধ:

  1. সোয়াপ: বর্তমানের সাথে পরবর্তী সূচকটি অদলবদল করুন;

  2. সরান: কার্সারটিকে +1 বা -1 সূচকে সরিয়ে দেয়;

এটি হ'ল আপনি প্রতিবেশী সূচকগুলি অদলবদল করতে পারবেন না, সূচী স্যুপ পরিবর্তন করতে পারবেন না, কেবলমাত্র সূচকটি অদলবদল করার 100পরে 10। সর্বাধিক দক্ষ অ্যালগরিদম কী - অর্থাত্, মোট চালগুলি কম পরিমাণে ব্যবহার করে?


13
যে আশ্চর্যজনক নয়, এটি একটি শারীরিক মেশিন যা গড়িয়ে যাওয়া লম্বা টেপটির সাথে আটকানো গাড়িগুলির একটি তালিকা বাছাই করবে। মেশিনটি কেবল টেপটিকে সামনে বা পিছনে স্থানান্তরিত করতে পারে এবং প্রতিবেশী কার্ডগুলি, কর্সের সাথে অদলবদল করতে পারে। বাস্তব বিশ্বে আপনি চারপাশে টেলিপোর্ট করতে পারবেন না, সুতরাং, এগুলি বিধিনিষেধগুলি ...
মায়াভিক্টর

2
সুতরাং, যখন আপনি বলেন যে আপনি এমন একটি অ্যালগরিদম চান যা অ্যারের আকার ছাড়া অন্য কোনও বাইট বরাদ্দ করে না , আমি অনুমান করি আপনি কেবল উপাদান স্টোরেজকেই উল্লেখ করেছেন, তাই না? আমি এখনও কাউন্টার এবং এই জাতীয় বরাদ্দ করতে পারি?
দারখোগ

5
ওহ, নিশ্চিত অবশ্যই. আপনি কিছু অতিরিক্ত কাঠামো বরাদ্দ করতে পারেন। এমনকি আপনি পুরো অ্যারে বরাদ্দ করতে পারেন এবং প্রচুর পরিমাণে ভারী গণনা করতে পারেন এবং এটি 0 ব্যয় হিসাবে গণনা করা হয়। আপনার কেবলমাত্র যে জিনিসটি হ্রাস করতে হবে তা হ'ল আসল শারীরিক মেশিনের SWAP / MOVE এর সংখ্যা, কারণ এটি ধীর। বুদ্বুদ সাজানোর সেরাটি আমি নিয়ে আসতে পেরেছি তবে আমি অনুমান করেছি আরও ভাল বিকল্প থাকতে হবে।
মাইয়াভিক্টর

1
আমি মনে করি না এরকম একটি অ্যালগরিদম আছে। কোনও অতিরিক্ত মেমরি ছাড়া আপনার কাছে কোনও নিয়ন্ত্রণের অবস্থা সঞ্চয় করার কোনও উপায় নেই।
রাফেল

1
@ এসভিআরএম: হ্যাঁ, তারপরে সীমাহীন র‌্যাম এবং টেপটি র‍্যামে অনুলিপি করতে এবং এতে নির্বিচারে গণনা করার ক্ষমতা সহ, অ্যালগরিদম "সমস্ত কিছুর চেষ্টা করুন এবং সর্বোত্তম প্রয়োগ করুন" টেপের চলনের সংখ্যার দিক থেকে অনুকূল is ব্যবহারিক হওয়া অসম্ভব, তবে এটি কারণ কারণ অনুশীলনে রানটাইমটি কয়েক মিলিয়ন বছর হতে পারে, 0 ;-) নয় যদি এটি দৈর্ঘ্য N এর একটি টেপ র‌্যামে অনুলিপি করতে N পদক্ষেপের জন্য ব্যয় করে, তবে নিষ্পাপ বক্ষ শক্তি অনুকূল নাও হতে পারে তবে এটি এন এর মধ্যেই রয়েছে within অনুকূল। তবে এর কোনওটিই আপনার সমস্যার সাথে সুনির্দিষ্ট নয়: বোগাস অ্যালগরিদম ব্যবহার করে "অফলাইনে" এই উপায়টি বর্ণনা করার সময় অনেকগুলি সমস্যা সমাধান করা যেতে পারে।
স্টিভ জেসোপ

উত্তর:


13

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


4

অ্যারের অর্ডার করতে প্রয়োজনীয় সংলগ্ন উপাদানের অদলবদলের সংখ্যা অ্যারেতে বিপর্যয়ের সংখ্যার সমান। মোট এন উপাদানগুলির সাথে , সর্বাধিক এন * (এন -1) / 2 বিপর্যয় রয়েছে, তাই বুদ্বুদ সাজান এই মডেলটিতে asylpotically অনুকূল সংখ্যার সোয়াপ দেয়।


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

4

আপনি যে দুটি অপারেটরের উল্লেখ করেছেন কেবলমাত্র সেই আলগোরিদিম যা বেশ দক্ষ the অ্যালগরিদমের জটিলতা সবচেয়ে খারাপ ক্ষেত্রে ।O(n2)

আমি দুটি অপারেশন বাদ দিয়েও ধরে নিয়েছি, আমরা সেন্ডিনেল এবং বা তালিকার কোনও ক্রিয়াকলাপের সাহায্যে আমরা ডানদিকের (অপি 3) বা বামদিকের অবস্থান (ওপেন 4) কিনা তা যাচাই করতে পারি । এছাড়াও আমাদের আলাদা করে দেওয়া বা স্ব্যাপ অপারেশনের সাথে একত্রে তুলনা অপারেশন (Op 5) করা উচিত। যদি তুলনা অপারেশনটি অদলবদলের ক্রিয়াকলাপের সাথে একত্রিত হয় তবে তা অবশ্যই আমাদের জানাতে হবে যে অদলবদ সঞ্চালিত হয়েছিল কি না।+ +

যে কোনও অ্যালগোরিদম যে কোনও বুলিয়ান পতাকা ব্যবহার করে না তা জানতে আমরা কোনও উপাদান অদলবস্ত করেছি কিনা তা নীচে দেওয়া হয়েছে (মেমরির পরিবর্তে তথ্যটি মেশিনের অবস্থায় রাখার কৌশল):

Start:
    Do until we are not at the leftmost position (Op 4)
        move left (Op 2b)

Check:
    If we are at rightmost position (Op 3)
        goto Finished:
    If current value is larger than next value (Op 5)
        goto Unfinished:
    move right (Op 2a)
    Repeat Check:

Unfinished:
    If we are at rightmost position (Op 3)
        goto Start:
    If current value is larger than next value (Op 5)
        swap the elements (Op 1) and move right (Op 2a)
    Repeat Unfinished:

Finished:
    The list is sorted now, output it.

এরিক লিপার্টের সমাধান, জিনোম সাজানও কাজ করে, কারণ মূলত এটি দ্বিমুখী বুদ্বুদ সাজানোর কাজ।


সন্নিবেশ সাজানোর সম্পর্কে কী?
দারখোগ

বুদ্বুদ সাজানোর জন্য কমপক্ষে দুটি লুপ কাউন্টার প্রয়োজন যা ইতিমধ্যে অনুমোদিত থেকে বেশি।
রাফেল

1
না, আপনি কাউন্টার ব্যবহার না করে কোনও পরিবর্তন (যা সর্বাধিক এন বার হয়) না হওয়া পর্যন্ত আপনি বাম এবং ডানে এবং তারপরে ডান থেকে বাম দিকে যেতে পারেন। এমনকি কোনও পরিবর্তন আছে কিনা তা লক্ষ করার জন্য আপনার বুলিয়ান পতাকার জন্য অতিরিক্ত স্থানের প্রয়োজনও নেই। যদি কোনও পরিবর্তন ঘটে থাকে তবে আপনি কেবল অন্য একটি সাবরুটিনে ঝাঁপ দাও যা একই কাজ করে, এটি বাদে এটি অন্য সাবরুটিন।
শ্রীশ

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

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