একটি লিনিয়ার স্ক্যান সেরা যা আমি জানি কীভাবে করতে হয়, যদি সেটগুলি সাজানো লিঙ্কযুক্ত তালিকাগুলি হিসাবে উপস্থাপন করা হয়। চলমান সময় হ'ল ।O(|A|+|B|)
নোট করুন যে আপনাকে প্রতিটি উপাদান বি এর প্রতিটি উপাদানের সাথে তুলনা করার দরকার নেই । যে একটি রানটাইম হতে হবে হে ( | একজন | × | বি | ) , যা অনেক খারাপ। পরিবর্তে, এই দুটি সেটগুলির প্রতিসাম্যগত পার্থক্য গণনা করার জন্য, আপনি উভয় সেটের সাধারণ মানের বাদ দেওয়া মানগুলিতে যথাযথভাবে সংশোধিত, মার্জোর্টে "মার্জ" অপারেশনের অনুরূপ একটি কৌশল ব্যবহার করতে পারেন।ABO(|A|×|B|)
আরও বিশদে, আপনি গণনা করার জন্য নীচের মতো একটি পুনরাবৃত্ত আলগোরিদিম তৈরি করতে পারেন , ধরে নিবেন যে A এবং B এর সাথে সংযুক্ত তালিকাগুলি অনুসারে তাদের মান অনুসারে সাজানো হয়েছে:A∖BAB
difference(A, B):
if len(B)=0:
return A # return the leftover list
if len(A)=0:
return B # return the leftover list
if A[0] < B[0]:
return [A[0]] + difference(A[1:], B)
elsif A[0] = B[0]:
return difference(A[1:], B[1:]) # omit the common element
else:
return [B[0]] + difference(A, B[1:])
আমি সিউডো-পাইথনে এটি উপস্থাপন করেছি। আপনি পাইথন পড়া না থাকে, তাহলে A[0]
যুক্ত তালিকা প্রধান A
, A[1:]
তালিকার বাকি, এবং +
তালিকার সংযুক্তকরণের প্রতিনিধিত্ব করে। দক্ষতার কারণে, আপনি যদি পাইথনে কাজ করছেন, আপনি সম্ভবত এটি উপরের মতো বাস্তবায়ন করতে চাইবেন না - উদাহরণস্বরূপ, অনেক অস্থায়ী তালিকা তৈরি করা এড়াতে জেনারেটর ব্যবহার করা ভাল be তবে আমি চেয়েছিলাম আপনাকে সম্ভাব্যতম সহজ আকারে ধারণাগুলি প্রদর্শন করুন। এই সিউডো-কোডের উদ্দেশ্যটি কেবল অ্যালগরিদমকে চিত্রিত করা, কোনও কংক্রিট বাস্তবায়নের প্রস্তাব দেওয়া উচিত নয়।
আপনার সেটগুলি বাছাই করা তালিকা হিসাবে উপস্থাপন করা হয় এবং আপনি যদি আউটপুটটিকে বাছাই করা তালিকা হিসাবে সরবরাহ করতে চান তবে কোনওরকম আরও ভাল করা সম্ভব বলে আমি মনে করি না। আপনারা মৌলিকভাবে এবং বি এর প্রতিটি উপাদানকে দেখতে হবে । ন্যায্যতার আনুষ্ঠানিক স্কেচ: যদি এমন কোনও উপাদান থাকে যা আপনি দেখেননি তবে আপনি এটি আউটপুট করতে পারবেন না, তাই আপনি যদি কেবলমাত্র কোনও উপাদানটির সন্ধান করতে বাদ দিতে পারেন কেবলমাত্র যদি আপনি জানেন যে এটি A এবং B উভয় ক্ষেত্রে উপস্থিত রয়েছে , তবে আপনি কীভাবে জানতে পারবেন যে এর উপস্থিতিটির মূল্য বিবেচনা না করা হলে এটি উপস্থিত?ABAB