কার্যকরী ভাষাগুলির জন্য কীভাবে অ্যালগরিদম জটিলতা তৈরি করা হয়?


38

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

তাহলে কি কার্যকরী ভাষার জন্য অ্যালগরিদম জটিলতার বিকল্প মডেলিং হওয়া উচিত?


3
এটি আপনি যা খুঁজছেন তা হতে পারে।
এরিস্তু

1
আপনার প্রশ্নের উত্তর এখানে দেওয়া যেতে পারে: cs.stackexchange.com/q/18262/755 । বিশেষত, বিশুদ্ধরূপে কার্যকরী ভাষার সময় জটিলতা উভয় ভাষার দক্ষতার উপর কিছু উপযুক্ত অনুমানের জন্য একটি অপরিহার্য ভাষায় সময়ের জটিলতার চেয়ে কমপক্ষে এর একটি অনুপাত দ্বারা পৃথক হয় । O(logn)
ডিডাব্লিউ

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

1
@ BobJarvis নির্ভর করে। একটি তালিকা কি আপনার জন্য একটি বিমূর্ত ডেটাটাইপ, বা আপনি বিশেষত লিঙ্কযুক্ত তালিকা বিবেচনা করছেন?
রাফায়েল

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

উত্তর:


34

যদি আপনি ধরে নেন যে ল্যাম্বদা-ক্যালকুলাস কার্যকরী প্রোগ্রামিং ভাষার একটি ভাল মডেল, তবে কেউ ভাবতে পারেন: ল্যাম্বদা-ক্যালকুলাস সময়-জটিলতার একটি আপাতদৃষ্টিতে সহজ ধারণা: কেবলমাত্র রেডাকশন পদক্ষেপের সংখ্যা গণনা করুন ।λ β ( λ x M ) N M [ N / x ]λλβ(λx.M)NM[N/x]

তবে এটি কি ভাল জটিলতা পরিমাপ?

এই প্রশ্নের উত্তর দেওয়ার জন্য আমাদের প্রথমে জটিলতা পরিমাপের অর্থ কী তা বোঝানো উচিত। একটি ভাল উত্তর স্লট এবং ভ্যান এমডি বোস থিসিস দ্বারা দেওয়া হয়েছে : যে কোনও ভাল জটিলতার পরিমাপের সাথে টুরিং মেশিনগুলি ব্যবহার করে সংজ্ঞায়িত সময়-জটিলতার প্রচলিত ধারণাটির সাথে বহুমাত্রিক সম্পর্ক থাকা উচিত। অন্য কথায়, সেখানে একটি 'যুক্তিসঙ্গত' এনকোডিং হওয়া উচিত থেকে টুরিং মেশিন, যেমন কিছু বহুপদী জন্য -calculus পদ , এটা কেনার ক্ষেত্রে দেখা যায় প্রতিটি শব্দ জন্য আকারের: একটি মান কমিয়ে দেয় -reduction পদক্ষেপ ঠিক যখন একটি মান কমিয়ে দেয়λ পি এম | এম | এম পি ( | এম | ) β টি আর ( এম ) পি ( | টি আর ( এম ) | )tr(.)λpM|M|Mp(|M|) βtr(M)p(|tr(M)|) টিউরিং মেশিনের পদক্ষেপ।

দীর্ঘদিন ধরে, এটি λ-ক্যালকুলাসে অর্জন করা যায় কিনা তা অস্পষ্ট ছিল। প্রধান সমস্যাগুলি নিম্নলিখিত:

  • এমন পদ রয়েছে যা সাধারণ ফর্মগুলি তৈরি করে (বহু পদে পদে বহু সংখ্যাতে) যা ক্ষতিকারক আকারের হয়। এমনকি সাধারণ ফর্মগুলি লিখতে তাত্পর্যপূর্ণ সময় লাগে।
  • নির্বাচিত হ্রাস কৌশল একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। উদাহরণস্বরূপ শর্তাদির একটি পরিবার বিদ্যমান যা সমান্তরাল steps-পদক্ষেপের ( বহুগুণ।-হ্রাসের অর্থে ) বহুবর্ষে হ্রাস পায় , তবে যার জটিলতা অ-প্রাথমিক (অর্থাত্ আরও খারাপ তাত্পর্যপূর্ণ) is

বি। অ্যাকাতোলি এবং ইউ ডাল লাগোর " বিটা রিডাকশন ইনভেরিয়েন্ট, প্রকৃতপক্ষে " কাগজটি একটি 'যুক্তিসঙ্গত' এনকোডিং দেখিয়ে বিষয়টি স্পষ্ট করে যা বহিরাগততম কল-বাই নাম কমানো ধরে নিয়ে বহুবর্ষীয় সময়ের ফাংশনগুলির জটিলতা শ্রেণি পি সংরক্ষণ করে the । মূল অন্তর্দৃষ্টি হ'ল ঘৃণ্য ব্লো-আপ কেবল 'উদ্বেগজনক' কারণে ঘটতে পারে যা সঠিক ভাগ করে নেওয়ার মাধ্যমে পরাজিত হতে পারে। অন্য কথায়, ক্লাস পি আপনি একইভাবে ট্যুরিং মেশিনের ধাপগুলি বা ( বামতম - বহির্মুখী ) অনুমানের গণনা নির্ধারণ করে কিনা তা সমান।β

অন্যান্য মূল্যায়ন কৌশলগুলির জন্য পরিস্থিতি কী তা আমি নিশ্চিত নই। আমি অবগত নই যে মহাকাশের জটিলতার জন্য অনুরূপ একটি প্রোগ্রাম চালানো হয়েছে।


23

অ্যালগরিদম জটিলতা নিম্ন স্তরের বিশদ থেকে পৃথক হতে ডিজাইন করা হয়েছে।

না সত্যিই না. আমরা সবসময় কিছু মেশিনের মডেলটিতে প্রাথমিক ক্রিয়াকলাপ গণনা করি:

  • টুরিং মেশিনের জন্য পদক্ষেপ
  • র‌্যামে বেসিক অপারেশন।

ΩΘOΘ

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


একমত। সাইড নোট: লোকজন না ঘন ঘন কি অপারেশন "ধ্রুবক" সম্পর্কে ভুল অনেক আছে। উদাহরণস্বরূপ, O(1)যখন এ + বি অনুমান করা হয় এটি আসলেই হয়O(log ab)
পল ড্রাগার

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

এটি "মেশিনের মডেল থেকে মুক্তি পান"
পল ড্রাগার

@ পলড্রাপার "মেশিন" শব্দের সাথে আপনি কী ধরনের অনুভূতি যুক্ত করেন তা নির্ভর করে। আরও দেখুন এই আলোচনা । FWIW, ইউনিট-ব্যয় র‌্যাম মডেল - আলগোরিদম বিশ্লেষণে যুক্তিযুক্ত স্ট্যান্ডার্ড মডেল! - হয় দরকারী, অন্যথায় এটি এখন কয়েক দশক ধরে ব্যবহার করা হয়েছে না। বাছাইয়ের জন্য সমস্ত পরিচিত সীমা, অনুসন্ধানের ট্রেস ইত্যাদি etc. মডেলের উপর ভিত্তি করে। এটি উপলব্ধি করে কারণ এটি বাস্তব কম্পিউটারগুলির মডেল হিসাবে যতক্ষণ নিবন্ধগুলিতে ফিট হয়।
রাফায়েল

1

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


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