কোন অ্যালগরিদম বাছাই করে?


24

ইতিমধ্যে বাছাই করা তালিকায় আমার একটি একক পূর্ণসংখ্যা যুক্ত করা দরকার, যেমন এটি সঠিক জায়গায় যায়। আমার প্রথম চেষ্টা কিছু ছিল

(sort (cons newelt list) #'<)

তবে, যা listইতিমধ্যে সাজানো হয়েছে, কেবলমাত্র একটি সন্নিবেশ প্রয়োজন, যার অর্থ এই অ্যালগোরিদমের ব্যবহারের ভিত্তিতে এই সমাধানটি মারাত্মকভাবে অনুপযুক্ত হতে পারে sort

সুতরাং, কোনটি অ্যালগরিদম sortব্যবহার করে?

আমি কি নীচের মতো কিছু করা ভাল?

(let ((tail list))
  ;; The first element is never less-than
  (while (and tail (< newelt (cadr tail)))
    (setq tail (cdr tail)))
  (setcdr tail (cons newelt (cdr tail)))
  list)

1
আমি যদি বাইনারি হিপ ব্যবহার করি (উদাহরণস্বরূপ হিপ.এল ), যদি তা আমার কোডটিতে ঘন ঘন অপারেশন হয়।
লুনারিওর

দিন Bইতিমধ্যেই সাজানো প্রাথমিক হতে listএবং Aএবং Cপ্রাথমিকভাবে খালি তালিকা। স্প্লিট Bদুই অংশে B1, B2লেন্থ এর mএবং mবা m+1এবং m, তুলনা neweltপ্রথম উপাদান B2। যদি neweltহয় প্রসারিত Aসঙ্গে তার ডানদিকে B1এবং প্রতিস্থাপন Bসঙ্গে B2, অন্য প্রসারিত Cসঙ্গে তার বাঁদিকে B2এবং প্রতিস্থাপন Bসঙ্গে B1। এই O(log n)ধরণের পদক্ষেপের পরে কিছুই বাকি থাকে না B। তারপরে Aজিনিসগুলি ≤ neweltএবং Cসেগুলি অন্তর্ভুক্ত রয়েছে > neweltএবং সংযুক্তি বর্ধিত বাছাই করা তালিকা তৈরি করে। e-lispভাষার খুব পছন্দ না করার জন্য ক্ষমা চাইছি ।
jfbu

উত্তর:


26

আপনি Emacs সোর্স কোড ইনস্টল করা থাকে, আপনার জন্য সোর্স কোড জানতে পারেন sortসঙ্গে M-x find-function

সেখানে আপনি দেখতে পাচ্ছেন যে sortমার্জ বাছাই করে। এটি তালিকার দৈর্ঘ্য পরীক্ষা করে, তালিকাটিকে অর্ধেক করে বিভক্ত করে, "সামনের" এবং "পিছনে" অংশগুলি পুনরাবৃত্তির মাধ্যমে আলাদাভাবে সাজায় এবং তারপরে দুটিকে একত্রিত করে।

আপনার বাস্তবায়ন দ্রুত হবে কিনা - তা পরিমাপ করুন! এটি তত্ত্ব (ও (এন) বনাম ও (এন লগ এন)) এ আরও দক্ষ, তবে sortসিটিতে লিখিত হওয়ার সুবিধা রয়েছে, ফলে ফলাফলটি অন্য কোনও পথে যেতে পারে। (অবশ্যই, আপনার ফাংশন বাইট-কম্পাইল করতে ভুলবেন না don't)


@ মালবারবা রেকর্ডটির জন্য, আপনি কত স্কেলের দৈর্ঘ্যে এটি পরীক্ষা করেছেন?
টি ভেরন

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