ন্যূনতম সংখ্যার তুলনায় দু'টি সাজানো অ্যারে একত্রীকরণের জন্য অ্যালগরিদম


24

হয় প্রদত্ত দুই সাজানো অ্যারে একটি , ধরনের টি আকার সঙ্গে এন এবং মি । আমি একটি অ্যালগরিদম খুঁজছি যা দুটি অ্যারেটিকে একটি নতুন অ্যারে (সর্বাধিক আকারের এন + মি) এর সাথে একীভূত করে।

আপনার যদি সস্তা তুলনা অপারেশন হয় তবে এটি বেশ সহজ। এক বা উভয় অ্যারে সম্পূর্ণরূপে বিপরীত না হওয়া অবধি কেবল সর্বনিম্ন প্রথম এলিমেন্টের সাথে অ্যারে থেকে নিন, তারপরে অবশিষ্ট উপাদানগুলি যুক্ত করুন। এর মতো কিছু /programming/

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

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

a = [1,2,3,4, ... 1000]
b = [1001,1002,1003,1004, ... 2000]

অথবা

a = [1,2,3,4, ... 1000]
b = [0,100,200, ... 1000]

কিছু ক্ষেত্রে রয়েছে যেখানে সরল মার্জ অ্যালগরিদম অনুকূল হবে, যেমন

a = [1,3,5,7,9,....,999]
b = [2,4,6,8,10,....,1000]

সুতরাং অ্যালগোরিদমটি আদর্শভাবে করুণভাবে হ্রাস করতে হবে এবং অ্যারেগুলি আন্তঃবাহিত অবস্থায় থাকলে বা কমপক্ষে উল্লেখযোগ্যভাবে খারাপ না হওয়ার ক্ষেত্রে সর্বাধিক এন + এম -1 তুলনা করা উচিত।

একটি বৃহত আকারের পার্থক্য সহ তালিকাগুলির জন্য বেশ ভালভাবে কাজ করা উচিত হ'ল ছোট অ্যারের উপাদানগুলি বড় অ্যারেতে intoোকানোর জন্য বাইনারি অনুসন্ধান ব্যবহার করা। তবে উভয় তালিকাগুলি একই আকারের এবং ইন্টারলিভডের ক্ষেত্রে এটি কৌতূহলজনকভাবে হ্রাস পাবে না।

উপাদানগুলির জন্য একমাত্র উপলভ্য হ'ল একটি (মোট) আদেশ ক্রিয়াকলাপ, সুতরাং তুলনামূলক সস্তা তুলনামূলক সস্তা যে কোনও পরিকল্পনা সম্ভব নয়।

কোন ধারনা?

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

এবং মূল পোস্টিংয়ের পর থেকে, আমি কীভাবে এটি কাজ করে সে সম্পর্কে একটি ব্লগ পোস্ট লিখেছিলাম ।


2
"সরল মার্জ অ্যালগরিদম" এর চেয়ে কম তুলনা করার উপায় নেই। আপনি উল্লিখিত প্রথমটির মতো প্রান্তের কেসগুলি হ্যান্ডেল করার চেষ্টা করতে পারেন তবে এটি গড় কেসটিকে আরও খারাপ করবে।
মফি

5
@ মফি: আমাদের আলোকিত করুন এবং একটি আনুষ্ঠানিক প্রমাণ দিন, দয়া করে। অথবা আপনি যদি না পারেন তবে আপনার মন্তব্য মুছে ফেলার (বা কমপক্ষে পরিমার্জন) বিবেচনা করুন।
ডক ব্রাউন

4
@ ডকব্রাউন যদি আমার কাছে আনুষ্ঠানিক প্রমাণ থাকে তবে আমি একটি মন্তব্য করব না, একটি উত্তর দেব। যাইহোক, এটি একটি সুস্পষ্ট সুস্পষ্ট রৈখিক সমস্যা, কারণ একটি লিনিয়ার তুলনায় আরও ভাল সমাধান সন্ধান করার জন্য কমপক্ষে রৈখিক সময় প্রয়োজন।
মফি

4
@ মফি: আমি আপনাকে নীচের উত্তরটি পড়তে সময় দিন এবং আপনি যা লিখেছেন তা নিয়ে দুবার চিন্তা করার পরামর্শ দিই।
ডক ব্রাউন

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

উত্তর:


31

সাধারণ মার্জ সাজানোর অ্যালগরিদম - একত্রীকরণের ধাপটি সাধারণত এন + এম -1 তুলনা প্রয়োগ করুন, যেখানে একটি তালিকা মাপের এন এবং অন্য তালিকাটি আকারের মি। এই অ্যালগরিদমটি ব্যবহার করে দুটি সাজানো তালিকার একত্রিত করার জন্য সর্বাধিক সহজ পদ্ধতি।

তুলনাগুলি খুব ব্যয়বহুল হলে আপনি দুটি জিনিস করতে পারেন - হয় আপনি তুলনার সংখ্যা হ্রাস করুন বা আপনি তুলনা ব্যয়কে হ্রাস করুন।

আসুন তুলনা ব্যয় হ্রাস করার উপর ফোকাস করা যাক। আপনি এবং কেবল আপনিই সিদ্ধান্ত নিতে পারবেন যে আপনি যে ডেটা তুলনা করছেন তা কোয়ান্টাইজড হতে পারে কি না। আপনি যদি তাদের পরিমাণ জানাতে পারেন তবে এটি একটি হ্যাশ পদ্ধতি প্রয়োগের একটি ফর্ম, যা ক্রমটি রাখছে। উদাহরণস্বরূপ, যদি আপনার ডেটাটির সাথে নামের সাথে তুলনা করা হয়, তবে প্রথম নামটি, ... আপনি "ক্লাইহেন, রুইগেইগার" নামের চরগুলিতে প্রথমটি নিতে পারেন এবং আপনার ডেটা উপাদানকে "কেএলআরউ" -তে কম / কোয়ান্টাইজ করতে পারেন, যদি আপনি এটির তুলনা করেন "প্যাকার," তে আপনি অর্ডারিং "Pa.Th" সংরক্ষণ করেন - হ্রাসকৃত মানগুলির তুলনা করে আপনি এখন একটি কম তুলনা অ্যালগরিদম প্রয়োগ করতে পারেন। তবে আপনি যদি অন্য কোনও "Kl.Ru" খুঁজে পান তবে আপনার এখন নিকট মূল্য রয়েছে এবং আপনি এখন এই উপাদানগুলির সাথে তুলনা করে আরও ব্যয়বহুল পদ্ধতির দিকে যেতে পারেন।

আপনি যদি আপনার ডেটা থেকে এই কোয়ান্টাইজড মানটি তুলনা করার চেয়ে দ্রুত বের করতে পারেন তবে এটিই প্রথম কাজ, আপনি কোয়ান্টাইটিসড বা হ্যাশ মানটিকে প্রথমে তুলনা করুন। দয়া করে মনে রাখবেন, এই মানটি কেবল একবার গণনা করা দরকার, যাতে আপনি এটি ডেটা উপাদান তৈরি করতে গিয়ে গণনা করতে পারেন।

আপনার তুলনা কমাতে আমি আরও একটি উপায় উল্লেখ করেছি।

আমি ক্লাসিক বই টিএওসিপি-খণ্ড 3-বাছাই এবং অনুসন্ধান, (পিপি 199-77, বিভাগ 5.3.2) যা আমার এই বিষয়টির পুরো 10 পৃষ্ঠা রয়েছে তা একবার দেখেছি। আমি আলগোরিদিমগুলিতে দুটি উল্লেখ পেয়েছি যা এন + এম -1 তুলনার চেয়ে দ্রুত।

প্রথমে হুয়াং-লিন একত্রীকরণ অ্যালগরিদম এবং দ্বিতীয়টি গ্লেন কে মানাচারের দ্বারা উন্নতি করা হয়েছে - উভয়ই টিএওসিপি দ্বারা উদ্ধৃত করা হয়েছে পাশাপাশি ক্রিস্টেন দ্বারা একটি অ্যালগরিদমও দেওয়া হয়েছে, যা দৈর্ঘ্যের n এবং m এর বিশেষ অবস্থার উপর প্রয়োজনীয় তুলনার নীচের সীমানায় পৌঁছেছে both তালিকাগুলির।

মানাচরের অ্যালগরিদমটি এসিএম খণ্ডের জার্নালে উপস্থাপিত হয়েছিল। 434-440 পৃষ্ঠায় 26 নম্বর 3: "" হাওয়ান-লিন "মার্জিং অ্যালগরিদম" এর উল্লেখযোগ্য উন্নতি। এম আইটেমগুলির সাথে তালিকা এবং এন আইটেমগুলির সাথে তালিকাগুলি বিভিন্ন দৈর্ঘ্যের হতে পারে তবে তারা এম এর উপাদানগুলির সংখ্যার দ্বারা তাদেরকেও অডোর করতে হবে <= n

হুয়াং-লিন অ্যালগরিদম ছোট তালিকাগুলির তালিকা বাদে তালিকাগুলি ভেঙে দেয় এবং প্রতিটি উপ-তালিকার প্রথম উপাদানটির তুলনা করে তালিকাগুলি বাছাই করে এবং সাব-লিস্টের কিছু উপাদানকে তুলনা করা দরকার কিনা তা সিদ্ধান্ত নিতে। যদি প্রথম তালিকার দ্বিতীয় তালিকার চেয়ে ছোট হয়, তবে সম্ভাবনা বেশি, দীর্ঘ তালিকার পরের উপাদানগুলি তুলনা ছাড়াই ফলাফলের তালিকায় স্থানান্তরিত হতে পারে। যদি ছোট আইএসটির প্রথম উপাদানটি বিভক্ত বৃহত তালিকার প্রথম উপাদানটির চেয়ে বেশি হয় তবে সাবলিস্টের সামনে থাকা সমস্ত উপাদান তুলনা ছাড়াই অনুলিপি করা যায়।

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

তালিকাগুলি যদি আপনার শেষ উদাহরণের মতো ইন্টারলিভড না হয় তবে বেশিরভাগ ক্ষেত্রে আপনার একটি ছোট ছোট এবং একটি বৃহত্তর তালিকা থাকা উচিত। এইচএল-অ্যালগরিদম আরও ভাল পারফর্ম করতে শুরু করলে এটি ঘটে।


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

4
আপনার উত্তরটি উন্নত করার পরে, আপনাকে নীচে নামিয়ে দেওয়া প্রত্যেকেই আপনাকে পুনরায় উজ্জীবিত করার সুযোগ পাবে ;-)
ডক ব্রাউন

+1 লক্ষ করার জন্য যে আকারগুলি যদি খুব আলাদা হয় তবে স্ট্যান্ডার্ড মার্জটি সর্বোত্তম নয়।
ফ্লোরিয়ান এফ

1

ধরুন দুটি অ্যারেতে N এবং M উপাদান রয়েছে, N ≥ M এবং সমস্ত উপাদান আলাদা।

যদি সাজানো অ্যারেতে N এর একটি উপাদান x থাকে তার পরে M এর এলিমেন্ট y বা বিপরীতে থাকে তবে x এবং y এর অবশ্যই তুলনা করা উচিত, অন্যথায় আমরা জানি না যে তারা কোন ক্রমের সাথে সম্পর্কিত। (অন্যান্য উপাদানগুলির একটি শৃঙ্খলা বলা যায় না, ক, খ, সি যেখানে আমরা জানি যে x <a <b <c <y, উদাহরণস্বরূপ, কারণ x এবং y এর মধ্যে কোনও উপাদান নেই So সুতরাং x এবং y অবশ্যই তুলনা করা হয়েছে সরাসরি।

যদি এন> এম হয় তবে এমন একটি অ্যারে থাকা সম্ভব যেখানে এম এর প্রতিটি উপাদান উভয়ের আগেই এন এর উপাদানগুলির পূর্বে এবং তার পরে থাকে, যার অর্থ কমপক্ষে 2 এম তুলনা করা দরকার - এমনকি যদি আপনি একটি অ-ডিস্ট্রিমেন্টিক বাছাই করা অ্যালগরিদম ব্যবহার করেন তবে কোন সংখ্যার তুলনা করতে হবে তা একটি নিখুঁত অনুমান। (এর অর্থ কী: ধরুন আপনার কাছে এন বৃহত, এম = ১ রয়েছে। বাইনারি অনুসন্ধানে ও (লগ 2 এন) পদক্ষেপ নেওয়া হয়; একটি অ-ডিস্ট্রিমেন্টিক অ্যালগোরিদম অনুমান করতে পারে যে দুটি অ্যারের মধ্যে দ্বিতীয় অ্যারের একটি উপাদান অন্তর্ভুক্ত এবং দুটি তুলনা করে অনুমান নিশ্চিত করুন)।

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