দুটি সারি ব্যবহার করে একটি তালিকা বিপরীত করা


12

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

  1. ইনপুট তালিকা থেকে পরবর্তী উপাদানটি সজ্জিত করুন (উভয় সারির লেজের দিকে)।
  2. যে কোনও সারির মাথায় উপাদানটি চিহ্নিত করুন এবং এটিকে আবার সজ্জিত করুন (উভয় সারির লেজের দিকে)।
  3. যে কোনও সারির মাথায় উপাদানটি সনাক্ত করুন এবং এটিকে আউটপুট তালিকায় যুক্ত করুন।

যদি ইনপুট তালিকায় উপাদান থাকে তবে বিপরীত আউটপুট তালিকা তৈরি করতে প্রয়োজনীয় ন্যূনতম সংখ্যার কীভাবে আচরণ? এটি চেয়ে দ্রুত বাড়ার একটি প্রমাণ বিশেষভাবে আকর্ষণীয় হবে, কারণ এটি আসল প্রশ্নটিকে নেতিবাচক ক্ষেত্রে সমাধান করবে।[1,2,...,N1,N][N,N1,...,2,1]O(N)


আপডেট (15 জানুয়ারী 2011): জমা দেওয়া উত্তরগুলি এবং তাদের মন্তব্যে দেখানো হিসাবে এ সমস্যার সমাধান করা যেতে পারে ; এবং এর একটি নিম্ন সীমাটি তুচ্ছ। এই সীমার দুটিও উন্নত করা যায়?O(NlogN)Ω(N)


স্পষ্ট করার জন্য: "উভয় সারি থেকে শেষ উপাদান" দ্বারা আপনি কিউয়ের শীর্ষে থাকা উপাদানটিকে উল্লেখ করছেন?
পিটার টেলর

@ পিটার: হ্যাঁ, স্পষ্টির জন্য ধন্যবাদ। আমি প্রশ্নটি সম্পাদনা করেছি।
mjqxxxx

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

@ জবাপল: না, তারা স্ট্যাকস নয়। আপনাকে ইনপুট তালিকা থেকে বিপরীত ক্রমে উপাদানগুলি আউটপুট তালিকায় লিখতে হবে read
এমজেকিউএক্সএক্সএক্সএক্সএক্সএক্সএক্সআরএক্স

উত্তর:


11

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

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

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

ও (লগ এন) বার বার একটি আনসফল এবং পুনরায় জোড় জোড় করে, আমরা পজিশনের বাইনারি উপস্থাপনার সমস্ত বিট পরিপূরক করতে পারি - যা তালিকার বিপরীত হিসাবে একই জিনিস।


তারপরে আপনি তালিকাটিকে একটি বাইনারি উপস্থাপনায় বিভক্ত করতে পারেন এবং একটি ও (এন এলজি এন) অ্যালগরিদমের জন্য পিস-বাই-পিস বিপরীত করতে পারেন I
jbapple

আমি ভাবছিলাম যে কেউ বাইনারি পরিবর্তে একটি 2-3 গাছ ব্যবহার করে সমস্ত এনগুলিতে প্রসারিত করতে পারে তবে আপনার ধারণাটি সহজ। তবে আপনি ও (লগ এন) এর মোট ওপেনের প্রতিটি (লগ এন) টুকরোটি কীভাবে বিপরীত করবেন?
ডেভিড এপস্টেইন

সময়টি হ'ল (সমষ্টি (2 ^ i) এলজি (2 ^ i)) আমার জন্য 0 থেকে [এলজি এন], যা ওল্ফ্রাম আলফা বলেছেন যে ও (এন এলজি এন): ওল্ফ্রামালফা / ইনপুট /? i=sum+ (2 ^ কে) + লগ 2 + (2 ^ কে) + + 0 + থেকে + লগ 2 + এন
জাব্যাপল

অবশ্যই, যদি আপনি প্রতিটি লম্বা লম্বার দৈর্ঘ্যের সাথে সমানুপাতিক সময়কে বিপরীত করতে পারেন তবে আপনি শেষ করেছেন। আপনি একবারে সেগুলি বিপরীত করার পরে আপনি টুকরোটি অন্য কোথাও রেখে দিতে হবে, এবং এর ফলে বাকী অংশগুলিকে বিপরীত করা আরও কঠিন হয়ে উঠবে।
ডেভিড এপস্টিন

সমস্যাটি একটি "আউটপুট তালিকা" পোস্ট করে। আমরা কি তাদের সেখানে রাখতে পারি?
jbapple

1

আমি যে সেরা অ্যালগরিদমটি ভাবতে পারি তার জন্য প্রয়োজন এক সারি থেকে অন্য সারিতে স্থানান্তর।i=0N/21(N2i2)

বাম এবং ডান হিসাবে দুটি উপলভ্য সারির নাম দিন। এন এই যে অনুমান সহ এই অ্যালগরিদমের মূল ধারণাটি এখানে রয়েছে:

  1. উপাদানগুলির প্রাথমিক তালিকা থেকে মানগুলি পড়ুন এবং সমস্ত বিজোড় সংখ্যাগুলি বাম সারিতে এবং এমনকি সংখ্যাকে ডান কাতারে চাপ দিন
  2. প্রথম মুদ্রার এক ধাপে সর্বাধিক মান আউটপুট করার দ্রুততম উপায় হ'ল N / 2-1 উপাদানকে ডান সারিতে থেকে বাম দিকে স্থানান্তর করা এবং উপরের মানটি ডান সারিতে থেকে আউটপুট তালিকায় পপ করা
  3. এখন আমাদের অন্য কিউয়ের জন্য একই কাজটি করতে হবে - বাম সারি থেকে N / 2-1 উপাদানগুলি ডানদিকের মধ্যে স্থানান্তর করুন এবং বাম সারি থেকে উপরের উপাদানটি আউটপুট তালিকায় পপ করুন
  4. সারি অদলবদল করুন এবং N = N-2 এর জন্য পদক্ষেপ 2 এবং 3 পুনরাবৃত্তি করুন

বিজোড় এন এর জন্য অ্যালগরিদম কীভাবে কাজ করা উচিত তা দেখতে সহজ is


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