ক্রিয়ামূলক প্রোগ্রামিং ভাষার প্রয়োগের উপর অ্যালগরিদম জটিলতা বিশ্লেষণ


10

আমি আজ শিখেছি যে গণনা মডেলের ভিত্তিতে অ্যালগরিদম বিশ্লেষণ আলাদা হয়। এটি এমন কিছু যা আমি কখনও ভাবিনি বা শুনিনি।

আমাকে দেওয়া একটি উদাহরণ, যা এটি আরও চিত্রিত করেছে, ব্যবহারকারী @ চেইটি হলেন:

যেমন টাস্কটি বিবেচনা করুন: প্রদত্ত (আমি,এক্স1,...,এক্সএন) রিটার্ন । র‍্যামে এটি সমাধান করা যায় যেহেতু অ্যারে অ্যাক্সেস ধ্রুবক সময়। টিএমএস ব্যবহার করে, আমাদের পুরো ইনপুটটি স্ক্যান করতে হবে, সুতরাং এটিএক্সআমিহে(1)হে(এন)

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

আমি বিশুদ্ধ ফাংশনাল ডেটা স্ট্রাকচারগুলি পড়ার সুযোগ পাইনি তবে আমি বিষয়টির জন্য উইকিপিডিয়া পৃষ্ঠাটি দেখেছি এবং মনে হয় যে কিছু ডেটা স্ট্রাকচারের সাথে প্রথাগত অ্যারেগুলি প্রতিস্থাপন করা হয়েছে:

"অ্যারেগুলি মানচিত্র বা এলোমেলো অ্যাক্সেস তালিকার দ্বারা প্রতিস্থাপন করা যেতে পারে, যা নিখুঁতভাবে কার্যকরী বাস্তবায়ন স্বীকার করে, তবে অ্যাক্সেস এবং আপডেটের সময়টি লোগারিথমিক।"

সেক্ষেত্রে গণনার মডেল কি আলাদা হবে, তাই না?


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

1
এও মনে রাখবেন যে কার্যত সমস্ত বাস্তব-বিশ্বের এফপি ভাষার কোনও গ্যারান্টিযুক্ত অ্যাক্সেসের সময় (আবশ্যক ভাষায়) রয়েছে এমন কোনও রূপে অ্যারে রয়েছে । এটি সাধারণত ভাষা আদিম হিসাবে তাদের যুক্ত করার সমাধান করা হয়। হে(1)
চি

1
একটি আলাদা গণনার মডেলের উদাহরণ হ'ল ল্যাম্বদা ক্যালকুলাস পদটিতে বিটা হ্রাসের সংখ্যা। এফপিতে আমরা ল্যাম্বডা ক্যালকুলাস হিসাবে পরিহিত একটি র‌্যাম মডেল ব্যবহার করছি, যদি তা বোঝা যায়
কার্ট মুয়েলার

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

1
মনে রাখবেন যে আপনার কার্যকরী ভাষা আগ্রহী বা অলস / কঠোর বা অ-কঠোর কিনা তাও আপনার জানতে হবে। আমি সম্প্রতি এমন পরিস্থিতির মুখোমুখি হয়েছি যেখানে হাস্কেল (অ-কঠোর) একটি বাস্তব-বিশ্ব অ্যালগরিদম বহুপদী ছিল তবে ওসিএএমএল (কড়া) এর নিখুঁত অনুবাদ ব্যর্থ ছিল।
এরিক লিপার্ট

উত্তর:


6

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

আমি মনে করি যে বেশিরভাগ কার্যকরী ভাষাগুলি সেভাবে এটি করে না এবং পরিবর্তে "ফাংশন কলগুলি হ'ল (1), তালিকার শীর্ষকে যুক্ত করা হয় ও (1)" এর মতো আরও দরকারী বিবৃতি দেয়।


আমি বিশ্বাস করি যে আমি আপনার উত্তরটি বুঝতে পেরেছি (ল্যাম্বডা ক্যালকুলাস সম্পর্কে আমার বোঝার অভাবের কারণে সম্ভবত ভুল বোঝাবুঝি হতে পারে): আপনি বলছেন যে মূলত আপনি কেস (কেস ভাষা হিসাবে) ভিত্তিতে বিশ্লেষণ করতে হবে, বরং একটি সাধারণ উপায়, কারণ নির্দিষ্ট ক্রিয়াকলাপগুলির জন্য ভাষা প্রতি পৃথক অর্থ রয়েছে। আমার বোধগম্যতা কি সঠিক?
আব্দুল

হ্যাঁ. অ্যালগরিদমের রানটাইম বিশ্লেষণ করার আগে আপনার ভাষা ডিজাইনারকে ভাষায় আপনি কী লিখতে পারেন তার আসলে কী বোঝাতে হবে তা আপনাকে বলতে হবে।
অ্যাড্রিয়ানএন

"আপনি বিচ্ছিন্নতায় প্রোগ্রামিং ভাষার বিষয়ে অ্যালগরিদম বিশ্লেষণ করতে পারবেন না" - এটি কি সাধারণভাবে এফপি ভাষা বা ভাষাগুলির উল্লেখ করা হয়েছিল? যদি এটি পূর্বের উল্লেখ করা হত, তবে স্কুলে আমরা কীভাবে সাধারণভাবে বিশ্লেষণকে আলগোরিদম করব? যেমন জাভা, সি / সি ++, পাইথনের সমস্যাগুলি জুড়ে বিশ্লেষণ করব? তারা কি সব একই রকম হয় কারণ? বা এটি কি কারণ অন্তর্নিহিত ডেটা স্ট্রাকচার এবং এডিটিগুলি একই রকম এবং একই পদ্ধতিতে কার্যকর করা হয়েছে? বা সর্বশেষে, কারণ এই কোর্সগুলি কেবলমাত্র শিক্ষার খাতিরে এবং প্রয়োজনীয়ভাবে কঠোরভাবে নির্ভুল করার প্রয়োজন নেই ?
আব্দুল

1
সমস্ত প্রোগ্রামিং ভাষার ক্ষেত্রে এটি সত্য। কঠোরভাবে সংশোধন করার জন্য আপনাকে প্রথমে একটি মেশিনের মডেল ঠিক করতে হবে, র‌্যাম এবং (এটি একটি ছোট মুষ্টিমেয়) নির্দেশনা সমর্থন করে। আপনি কেবলমাত্র সেই নির্দেশাবলী ব্যবহার করে প্রোগ্রামগুলিতে বিশ্লেষণ করতে পারেন। তারপরে আপনি সেই প্রোগ্রামিং মডেলের সাথে আপনার প্রোগ্রামিং ভাষার ম্যাপিংয়ের কথা ভাবতে পারেন। তারপরে আপনি প্রোগ্রামিং ভাষায় প্রোগ্রামগুলি বিশ্লেষণ করতে পারেন। খুব কঠোর চিকিত্সার জন্য পরীক্ষা করুন যে নুথ এটি আর্ট অফ কম্পিউটার প্রোগ্রামিংয়ে কী করে। বিগ-ও লুকিয়ে থাকা ধ্রুবকগুলির কারণে এর অনেক কিছুই সরল করা যায়।
অ্যাড্রিয়েনএন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.