খাঁটি ডেটাফ্লো স্টাইলে "ইনক্রিমেন্টাল আপডেট" ফাংশন রচনা করার জন্য কি কোনও দৃষ্টান্ত রয়েছে?


10

আমি এই প্রশ্নটি জিজ্ঞাসা করার জন্য সঠিক পরিভাষা জানি না, তাই আমি পরিবর্তে এটি প্রচুর শব্দ দিয়ে বর্ণনা করব, আমার সাথে সহ্য করুন।

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

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

input = [5, 20, 7, 2, 4, 9, 6, 13, 1, 45]
intermediate = sort(input)
final_output = substring(intermediate, 0, 5)

বাছাই ফাংশনের জটিলতা হ'ল হে (এন লগ এন)। তবে বিবেচনা করুন যে এই প্রবাহটি এমন একটি অ্যাপ্লিকেশনটিতে ব্যবহৃত হয় যেখানে 1 টি উপাদান যুক্ত করে ইনপুট একবারে কিছুটা পরিবর্তন হয়। প্রতিবার স্ক্র্যাচ থেকে পুনরায় বাছাই করার পরিবর্তে, আসলে (ও), এমন একটি ফাংশন ব্যবহার করা দ্রুত হবে যা নতুন অবস্থাকে সঠিক অবস্থানে byুকিয়ে পুরানো ক্যাশেড সাজানো তালিকার আপডেট করে। এটি কেবলমাত্র একটি উদাহরণ - অনেকগুলি "স্ক্র্যাচ থেকে" ফাংশনগুলিতে এই জাতীয় "ইনক্রিমেন্টাল আপডেট" অংশ থাকে। এছাড়াও, সম্ভবত নতুন যুক্ত হওয়া উপাদানটি চূড়ান্ত_আউটপুটে উপস্থিত হবে না কারণ এটি 5 তম অবস্থানের পরে।

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

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


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

উত্তর:


7

এই ক্ষেত্রটি অনেকবার উদ্ভাবিত হয়েছে, এবং অনেক নামে চলেছে যেমন:

(এবং সম্ভবত আরও।) সেগুলি এক নয়, তবে সম্পর্কিত।

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

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

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

তদ্ব্যতীত, প্রদত্ত অ্যালগরিদমের একটি অনলাইন সংস্করণ সহ সর্বদা 'হাত দ্বারা' চেষ্টা করা এবং আসতে পারে। এটা কঠিন হতে পারে।


(1) ওয়াই সি, পিজি গিয়েরুসো, টি। রেন্ডেল, কে। ওস্টেরম্যান, উচ্চ-আদেশ ভাষার জন্য পরিবর্তনগুলির একটি তত্ত্ব: স্থির পার্থক্য দ্বারা ment-ক্যালকুলি বাড়ানো


1

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

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