ডেটা সমান্তরাল অপারেটরগুলির সাথে মোট কার্যকরী ভাষা ব্যবহার করে কোন অ্যালগরিদম প্রকাশ করা যেতে পারে?


11

একটি কার্যকরী প্রোগ্রামিং ভাষা কল্পনা করুন যার কেবলমাত্র ডেটা টাইপগুলি সংখ্যাগত স্কেলার এবং অ্যারেগুলির নির্বিচারে বাসা বাঁধে। ভাষাটিতে সীমাহীন পুনরাবৃত্তির কোনও মাধ্যম নেই, সুতরাং নিম্নলিখিতটি মঞ্জুরিপ্রাপ্ত নয়:

  • সুস্পষ্ট লুপস (কোনওভাবে পার্শ্ব-প্রতিক্রিয়া ছাড়াই বেশি ব্যবহার হয় না)
  • পুনরাবৃত্তির
  • স্বেচ্ছাসেবী প্রথম শ্রেণির ফাংশন (কোনও y- সংযোজক নেই)

ভাষাটিতে অবশ্য রয়েছে:

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

ডেটা সমান্তরাল অপারেটর সম্পর্কে আরও সুনির্দিষ্ট হতে:

  • y = মানচিত্র (চ, এক্স) => y [i] = চ [i]
  • y = কিছু কমিয়ে দেওয়ার জন্য (এফ, এ, এক্স) => y = ফ (ক, চ (y [পি [০]], চ (ওয় [পি [১]], ...)) হ্রাস করুন
  • y = স্ক্যান (f, a, x) => y [i] = হ্রাস করুন (এফ, এ, ওয় [0 ... আই -1])
  • y = allp জোড়া (f, x, y) => y [i, j] = f (x [i], y [j])

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

স্পষ্টতই কিছু নির্মাণ রয়েছে যা এই ভাষায় প্রকাশ করা যায় না যেমন:

while f(x) > tol:
    x <- update(x)   

আমরা এই সিস্টেমে কী প্রকাশ করতে পারি? আমরা কি কেবল এফপিতে সমস্যা অনুসন্ধানের মধ্যে সীমাবদ্ধ? আমরা কি বহু বহু সময়ের আলগোরিদিম ক্যাপচার করতে পারি? এছাড়াও, এই শ্রেণীর জন্য অপারেটরদের কিছু ন্যূনতম সেট আছে?

উত্তর:


7

আপনি পুরানো প্রোগ্রামিং ল্যাঙ্গুয়েজ এনইএসএল দেখতে চাইতে পারেন যা এই ধারণাগুলি গুরুত্ব সহকারে নিয়েছে took ভাষা সংগ্রহের ক্রিয়াকলাপগুলির ভিত্তিতে, মূলত তালিকাগুলির তালিকাগুলির তালিকাগুলি ইত্যাদির উপর ভিত্তি করে তৈরি হয়, তবে আমার ধারণা গাছগুলি এবং গ্রাফগুলিও জটিল এনকোডিংয়ের মাধ্যমে বিবেচিত হয়েছিল। সেই প্রকল্পে করা কিছু গবেষণা (১৯৯০ এর দশকের মাঝামাঝি) আপনার প্রশ্নের উত্তর দিতে সহায়তা করতে পারে। পিএইচডি থিসিস (বই হিসাবে উপলভ্য) গাই ই ব্লেলোচ। ডেটা-প্যারালাল কম্পিউটিংয়ের জন্য ভেক্টর মডেল। এমআইটি প্রেস, 1990 কিছু উত্তর দিতে পারে। আমি এটি তাকিয়ে কিছু সময় আগে ছিল।

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

আমি সংক্ষিপ্ত, অনর্থক উত্তরটি হ'ল আপনি যথেষ্ট পরিমাণে প্রকাশ করতে পারেন।


1
এনইএসএল মোট ভাষা নয়।
প্রতি ভোগেনসেন

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

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

2
পুনরাবৃত্তিটি সরিয়ে ফেলুন, তারপরে আপনার কাছে একটি সুন্দর অভিব্যক্তিপূর্ণ ভাষা আছে, বিশেষত যদি আপনি ভাঁজগুলি এবং আরও অনেক কিছু বিবেচনা করেন। বিএমএফ এবং এরপরের কাজটির দিকে তাকানো তখন আরও আগ্রহী হতে পারে। আমি দুঃখিত, তবে আমি এই অঞ্চলে আপ টু ডেট নেই।
ডেভ ক্লার্ক

7

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

মোট ভাষায় ভাঁজ তালিকাগুলি গ্রহন করে:

fold :: (a -> b -> b) -> b -> List a -> b

মোট ভাষায় উদ্ভাসিত স্ট্রিম উত্পন্ন করে, যা সম্ভাব্য সীমাহীন:

unfold :: (b -> Maybe (a, b)) -> b -> Stream a

দুর্ভাগ্যক্রমে, তালিকা এবং স্ট্রিমগুলি বিভিন্ন বিশ্বে বাস করে, তাই এই অপারেটরগুলি রচনা করা যায় না। আমাদের একটি আংশিক চিঠিপত্রের প্রয়োজন:

stream :: List a -> Stream a
list :: Int -> Stream a -> List a

স্ট্রিম অপারেটর একটি তালিকা সীমানা প্রবাহে এম্বেড করে। তালিকার ফাংশনটি প্রথম এন উপাদানগুলি বের করে (বা স্ট্রিমটি ইতিপূর্বে সমাপ্ত হলে কম) তালিকাতে into আমাদের এভাবে নিম্নলিখিত সমীকরণ রয়েছে:

for all xs :: List a, xs == list (length xs) (stream xs)

দক্ষতা অপ্টিমাইজেশন হিসাবে আমরা একটি মধ্যবর্তী ডেটা কাঠামো হিসাবে পুরোপুরি স্ট্রিমগুলি কাটাতে পারি:

unfoldList :: Int -> (b -> Maybe (a, b)) -> b -> List a

আমি এখন একটি প্রমাণ স্কেচ করব যে এটি (অন্যান্য অপারেটরদের সাথে মূল প্রশ্নে ইতিমধ্যে অন্তর্ভুক্ত) আমাদের যেকোন বহু-সময়কালীন অ্যালগরিদম অনুকরণ করতে দেয়।

সংজ্ঞা অনুসারে, টিউরিং মেশিন এম থাকে এবং একটি বহুবচনীয় পি থাকে এমন একটি ভাষা এল এর মধ্যে থাকে যেখানে এল এর মধ্যে x এর সদস্যতার সিদ্ধান্ত নেওয়া যেতে পারে যেখানে বেশিরভাগ পি (এন) পুনরাবৃত্তিগুলি চালানো যায় যেখানে n = | x | একটি আদর্শ আর্গুমেন্ট অনুসারে, যন্ত্রের টেপ অসীম হওয়া সত্ত্বেও পুনরুক্তি কেতে মেশিনের টেপের স্থিতিস্থাপকে সর্বোচ্চ 2 কে + 1 এ দৈর্ঘ্যের একটি তালিকা দিয়ে এনকোড করা যায়।

তালিকাটি এখন তালিকাগুলি থেকে তালিকাগুলিতে ফাংশন হিসাবে এম এর संक्रमणকে প্রতিনিধিত্ব করবে idea যন্ত্রটির সম্পাদনটি রূপান্তর ফাংশন দিয়ে প্রাথমিক অবস্থার উদ্ঘাটন দ্বারা করা হবে। এটি তালিকার একটি স্ট্রিম উত্পন্ন করে। এল পি তে রয়েছে এমন অনুমানের অর্থ হল যে আমাদের প্রবাহে পি (এন) উপাদানগুলি ছাড়া আর দেখার দরকার নেই। এইভাবে আমরা list p(n)একটি সীমাবদ্ধ তালিকা পাওয়ার জন্য উদ্ঘাটিত রচনা করতে পারি । শেষ অবধি, সিদ্ধান্ত সমস্যার উত্তরটি হ্যাঁ বা না ছিল কিনা তা পরীক্ষা করার জন্য আমরা এটিকে ভাঁজ করি।

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


4

এটি খুব ঝকঝকে ভাষা। ফ্যাক্টরিয়াল ফাংশন প্রোগ্রামিংয়ের চেষ্টা করুন:

fact 0 = 1
fact n = n * fact (n-1)

সমস্যাটি হ'ল আপনার ভাষায় কেবল ভাঁজ রয়েছে তবে কোনও ফল প্রকাশিত হয়নি। কৌতুকিকটি প্রকাশের প্রাকৃতিক উপায় হ'ল তালিকার [1, 2, ..., n] এর মধ্যে একটি ভাঁজ রচনা করা যা ভাঁজ করার সময় এটি ভেঙে যায়।

আপনি কি এই নির্দিষ্ট ভাষায় বা সাধারণভাবে কার্যকরী প্রোগ্রামিংয়ে সত্যই আগ্রহী? এটা সুস্পষ্ট যে আপনার ভাষা সর্বাধিক বহিরাগত সময়ের আলগোরিদিম প্রকাশ করতে পারে। সিস্টেম এফ (বহুকোষী ল্যাম্বডা ক্যালকুলাস) আ্যাকারম্যানের কাজ মতো দানবকে সহজেই প্রকাশ করতে পারে। এমনকি যদি আপনার আগ্রহ বহু-কালীন অ্যালগরিদমে থাকে তবে আপনার স্বাভাবিকভাবেই এগুলি প্রকাশ করার জন্য অতি-বহুবর্ষ কনুই ঘরটি প্রয়োজন frequently

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


দুঃখিত, উদ্ঘাটিত অপারেটরগুলির অভাবটি আমার পক্ষ থেকে একটি তদারকি ... আমি একটি যুক্ত করতে চাইছিলাম তবে পোস্টে রাখতে ভুলে গেছি। আমি এই নির্দিষ্ট ভাষায় অগত্যা আগ্রহী নই বরং ডেটা প্যারালাল গণনার সার্থকতা এবং সীমাবদ্ধতা।
অ্যালেক্স রুবিনস্টেইন

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