কীভাবে কোনও 0 এবং 1 এর সমান সংখ্যার সাথে সমস্ত বাইনারি ক্রম দক্ষতার সাথে উত্পাদন করে?


10

দৈর্ঘ্য এর একটি বাইনারি ক্রমটি কেবল একটি ক্রম যাতে প্রতিটি হয় বা । এই জাতীয় সমস্ত বাইনারি ক্রম উত্পন্ন করতে, কেউ নিম্নলিখিত পদ্ধতিতে সুস্পষ্ট বাইনারি গাছের কাঠামোটি ব্যবহার করতে পারেন: মূলটি "খালি", তবে প্রতিটি বাম বাচ্চা বিদ্যমান স্ট্রিংয়ে এবং প্রতিটি ডান সন্তানের সাথে । এখন, প্রতিটি বাইনারি ক্রমটি কেবল দৈর্ঘ্যের এর মূল যা মূল থেকে শুরু হয় এবং কোনও পাতায় শেষ হয়।এক্স 1 , , এক্স এন এক্স জে 0 1 0 1 এন + 1nx1,,xnxj0101n+1

এখানে আমার প্রশ্ন:

যদি আমরা শুধুমাত্র দৈর্ঘ্যের সমস্ত বাইনারি স্ট্রিং জেনারেট করতে চান আমরা আরো ভালো করতে পারে যা অবিকল আছে zeros এবং বেশী?এন এন2nnn

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


1 থেকে সংখ্যাগুলির সমস্ত কঠোর ক্রমবর্ধমান ক্রমগুলি দক্ষতার সাথে উত্পন্ন করার কোনও উপায় আপনি খুঁজে পেতে পারেন ? 2 এনn2n
কর্নেলিয়াস ব্র্যান্ড

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

সম্ভবত পৃথক নোটে, এখানে একটি জাভা বাস্তবায়ন কে-ite -াইট্রেটার চয়ন করুন(nk)
পল জিডি

উত্তর:


6

স্পষ্টতই length length দৈর্ঘ্য এর বাইনারি স্ট্রিং রয়েছে । বাইনারিটি অতিক্রম করার জন্য একটি অ্যালগরিদমকে একবারে প্রতিটি নোড একবার দেখতে হবে, অর্থাত it । পদক্ষেপ।4n2n

i=02n2i=22n+11=O(4n)

আসুন একটি পুনরাবৃত্ত আলগোরিদিম বিবেচনা করুন যা আপনার বর্ণিত গাছটিকে অনুসরণ করে, তবে তার পথে সংখ্যা এবং শূন্যগুলির সংখ্যা গণনা করে, অর্থাত্ এটি গাছের ভাল অংশটি অতিক্রম করবে।
তবে 0 এবং 1 এর সাথে কতগুলি বাইনারি স্ট্রিং রয়েছে? আমাদের দৈর্ঘ্য স্ট্রিংয়ের জন্য আমরা 1 গুলি নির্বাচন করি এবং পদক্ষেপ 2 তে সূত্রটি ব্যবহার করি: nnn2n

(2nn)=(2n)!(n!)2=4nπn(1+O(1/n))

সম্পাদনা করুন
পিটার শোরের মন্তব্যে ধন্যবাদ আমরা দ্বিতীয় অ্যালগরিদমের দ্বারা প্রয়োজনীয় পদক্ষেপগুলির সংখ্যাও বিশ্লেষণ করতে পারি, যা 1 এবং 0 এর গণনা করে। আমি নীচে থেকে তার মন্তব্য উদ্ধৃত করছি:

আমরা ঠিক 0 এবং 1 এর সাথে সমস্ত বাইনারি ক্রম সন্ধান করতে চাই । আমরা বাইনারি গাছটি অতিক্রম করি যেখানে প্রতিটি নোড সর্বাধিক 0 এবং 1 এর ক্রম । আমাদের 0 এর বেশি বা 1 এর বেশি সংখ্যক কোনও নোড ঘুরে দেখার দরকার নেই । আমাদের কতটি নোড ঘুরে দেখা দরকার? আছে সঙ্গে স্ট্রিং 0 এবং 1 এর। এই দেয় । এখন, আমাদের প্রতিটি নোডের প্রতি নোডের ধ্রুবক গড় ব্যয়ে পরিদর্শন করতে হবে। আমরা প্রথমে প্রতিটি বাম বাচ্চা এবং দ্বিতীয় ডান সন্তানের সাথে দেখা করে এটি করতে পারি।nn2nnn(i+ji)iji,jni=0nj=0n(i+ji)=(2n+2n+1)1

স্ট্রিলিংয়ের সূত্রটি আবার ব্যবহার করে আমরা নতুন অ্যালগরিদমের চলমান সময় হিসাবে ।

(2n+2n+1)1=4n+11n+1(1+O(1/n))1=O(4nn)

আপনাকে কিছুটা সতর্ক হতে হবে। সম্ভবত প্রতিটি স্ট্রিং উত্পন্ন করার পরে, আমরা এটি সময়ে প্রক্রিয়া করি । সুতরাং কেবলমাত্র সমস্ত ভারসাম্যযুক্ত স্ট্রিংগুলিতে প্রক্রিয়া করতে সময় লাগে । যদি অনুকূলিত "বোকা" প্রজন্মের অ্যালগরিদমটি সত্যই তবে বাগের সুযোগ ছাড়া অন্য কোনও চৌকস অ্যালগরিদমে স্যুইচ করে আরও কিছু লাভ করার কিছুই নেই। Ω(n)Ω(4nn)O(4n)
যুবাল ফিল্মাস

@ ইউভাল ফিল্মাস: "স্ট্রিং প্রসেসিং" বলতে আপনার অর্থ কী? যদি আপনি আউটপুট বোঝাতে চান যা অবশ্যই , তবে আপনাকে "নির্বোধ" অ্যালগরিদমের চলমান সময়েও সেই বিষয়টিকে বিবেচনা করতে হবে, যা তখন । Θ(n)O(4nn)
tranisstor

2
আমার বক্তব্যটি হ'ল আপনি যদি এবং between এর মধ্যে পার্থক্য নিয়ে উদ্বিগ্ন হন , তবে ন্যূনতম হিসাবে আপনাকে সঠিক চলমান সময়গুলি বর্ণনা করতে হবে; reveal দুটি অ্যালগরিদমের মধ্যে কোনও সম্ভাব্য পার্থক্য প্রকাশ করতে যথেষ্ট নয়। এছাড়াও, আপনার প্রস্তাবিত নতুন অ্যালগরিদমকে বিশদভাবে বিশ্লেষণ করতে হবে, দেখতে এই "নগন্য" ছোট কারণগুলি তুচ্ছ আলগোরিদমের চেয়ে ধীর করে না। 4n4n/nO~(4n)
যুবাল ফিল্মাস

2
"খারাপ অংশগুলি" অন্তর্ভুক্ত না করে আপনি কীভাবে গাছের "ভাল অংশ" তৈরি করবেন? আপনাকে গাছের সমস্ত নোড অন্তর্ভুক্ত করতে হবে যার শিকড় থেকে শুরু করার পথে বাম শিশু বা ডান শিশুদের বেশি নেই। এটি কাজ করে, তবে এটি কাজ করে তা দেখানোর জন্য আপনার অতিরিক্ত যুক্তি প্রয়োজন। বিশেষত, আপনার সূত্রটি ব্যবহার করতে হবে । nni=0nj=0n(i+ji)=(2n+2n+1)1
পিটার শোর

2
আমরা ঠিক 0 এবং 1 এর সাথে সমস্ত বাইনারি ক্রম সন্ধান করতে চাই । আমরা বাইনারি গাছটি অতিক্রম করি যেখানে প্রতিটি নোড সর্বাধিক 0 এবং 1 এর ক্রম । আমাদের 0 এর বেশি বা 1 এর বেশি সংখ্যক কোনও নোড ঘুরে দেখার দরকার নেই । আমাদের কতটি নোড ঘুরে দেখা দরকার? আছে সঙ্গে স্ট্রিং 0 এবং 1 এর। এই দেয় । এখন, আমাদের প্রতিটি নোডের প্রতি নোডের ধ্রুবক গড় ব্যয়ে পরিদর্শন করতে হবে। আমরা প্রথমে প্রতিটি বাম বাচ্চা এবং দ্বিতীয় ডান সন্তানের সাথে দেখা করে এটি করতে পারি।nn2nnn(i+ji)iji,jni=0nj=0n(i+ji)=(2n+2n+1)1
পিটার শোর

2

সম্ভবত আমি ঘন হয়ে যাচ্ছি, তবে মূল প্রশ্নটি দৈর্ঘ্য 2n এর সমস্ত "সুষম" বাইনারি সিকোয়েন্স তৈরির উপায় চেয়েছিল যা দৈর্ঘ্য 2n এর সমস্ত বাইনারি সিকোয়েন্সের একটি গাছকে অনুসরণ করা এবং কেবল ভারসাম্যযুক্ত কেবল আউটপুট দেওয়ার চেয়ে বেশি কার্যকর ছিল। তাহলে কেন গাছ মোটেই ব্যবহার করবেন?

এখানে পুনরাবৃত্ত আলগোরিদিমের জন্য সিউডোকোড যা এই জাতীয় সমস্ত ক্রম উৎপন্ন করে (মূল শব্দ "ফলন" আউটপুটে একটি অনুক্রম প্রেরণ করে):

function all-balanced(n) {
  all-specified( "", n, n );
};

function all-specified( currentString, zeroes, ones ) {

  if (zeroes == 0) {
    for i = 0 to ones {
      currentString += "1";
    };
    yield currentString;
    return;
  };

  if (ones == 0) {
    for i = 0 to zeroes {
      currentString += "0";
    };
    yield currentString;
    return;
  };

  all-specified( currentString+"0", zeroes-1, ones );
  all-specified( currentString+"1", zeroes, ones-1 );
  return;
};

আমি যদি কিছু ভুল বুঝে থাকি তবে দয়া করে আমাকে বলুন, তবে আমার কাছে মনে হয় এটি আসলে উত্থাপিত সমস্যার সর্বাধিক দক্ষ উত্তর সম্পর্কে যা কোনও গাছের ব্যবহার নির্দিষ্ট করে নি।

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