প্রদত্তটির অ-ক্রমহীন ক্রমটি কীভাবে খুঁজে পেতে লোভী অ্যালগরিদম ব্যবহার করবেন?


20

আপনাকে এবং মধ্যে n পূর্ণসংখ্যা হবে । প্রতিটি পূর্ণসংখ্যা অধীনে আপনার এবং মধ্যে একটি পূর্ণসংখ্যা লিখতে হবে যা একটি অ-হ্রাসকারী ক্রম তৈরি করে হতে এই জাতীয় ক্রমের বিচ্যুতি সংজ্ঞায়িত করুন । একটি অ্যালগরিদম ডিজাইন করুন যা রানটাইম হে (n \ sqrt [4] {l}) এর সর্বনিম্ন বিচ্যুতি সহ বি_আই'র সন্ধান করে । 0 l a i b i 0 l b i সর্বোচ্চ ( | একটি 1 - বি 1 | , , | একটি এন - বি এন | ) বি ia1,,an0laibi0lbimax(|a1b1|,,|anbn|)biO(nl4)

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

উত্তর:


9

আসুন নিম্নলিখিত পর্যবেক্ষণ দিয়ে শুরু করুন:

যাক max বোঝাতে ক্রম সর্বোচ্চ a1,...,an , এবং দিন min বোঝাতে তার সর্বনিম্ন। যদি a1=max , তবে b1=b2=...=bn=(max+min)/2 নেওয়া অনুকূল choosing

কেন এই ক্ষেত্রে? ওয়েল, সর্বোচ্চ সঙ্গে ক্রম শুরু থেকে, নয়তো আমরা নির্বাচন b1 বড়, এবং ক্রম ন্যূনতম থেকে বৃহৎ বিচ্যুতি ভোগা (যেহেতু পরবর্তী bi বেশী হতে বা সমান নয় b1 ), অথবা আমরা নির্বাচন b1 ক্ষুদ্র ও ভোগা থেকে বিচ্যুতি max । গড় সর্বোচ্চ বিচ্যুতি হ্রাস করে।

আমরা এখন সাধারণ অনুক্রম a_1, ..., a_n এ ব্যবহার করতে এই পর্যবেক্ষণটিকে সাধারণ করার চেষ্টা করতে পারি a1,...,an। উদাহরণস্বরূপ, আমরা যে কোনও অনুক্রমকে উপসর্গগুলিতে বিভাজন করতে পারি, যেমন প্রতিটি স্ব-স্ব অনুচ্ছেদে সর্বাধিক দিয়ে শুরু হয়।

উদাহরণ: , , এবং এ বিভাজন করা হয়েছে ।( 2 )(2,6,4,1,5,2,8,7,5,1)(2)( 8 , 7 , 5 , 1 )(6,4,1,5,2)(8,7,5,1)

এই বিভাজনটি দেওয়া, আমরা এখন এই প্রতিটি পৃথকভাবে সমাধান করতে পারি, এবং এর একটি অ্যাসাইনমেন্ট পেতে , তবে এটি অ-হ্রাসকারী লঙ্ঘন করতে পারে। অনুকূলতা হারানো ছাড়াই এটি স্থির করা যেতে পারে।bi

লক্ষ্য করুন যে সর্বশেষ অনুচ্ছেদে সর্বদা পুরো ক্রমের সর্বাধিক থাকে (অন্যথায়, এর পরে আরও একটি অনুচ্ছেদ থাকবে)। যাক মান আমরা নির্ধারিত হতে subsequences। এখন, এ অ- , আমরা থেকে পিছন থেকে শুরু এবং দিকে আমাদের পথে কাজ করি। যদি চেয়ে বড় হয় , আমরা কেবল সেট । এটি ছোট হলে আমরা এটি রাখি। তারপরে, আমরা সাথে এবং আরও কিছু তুলনা করে এগিয়ে চলি । নোট করুন যে কোনও কে the এর মান কমিয়ে দেওয়া হচ্ছেW 1 , W 2 , , ডব্লু কেmaxw1,w2,...,wkW 1 , , W W W - 1 W W - 1 : = W W - 2 W - 1 W আমি W আমি + + 1 W আমি W আমি + + 1kw1,...,wkwkwk1wkwk1:=wkwk2wk1wiwi+1কখনো বিচ্যুতি বৃদ্ধি, যেহেতু subsequence সঙ্গে নির্ধারিত মধ্যে maximium মান সবসময় সঙ্গে নির্ধারিত subsequence সর্বোচ্চ চেয়ে কম ।wiwi+1

আমার মনে হয় এই অ্যালগরিদমটি সঠিক হওয়া উচিত। চলমান সময় সম্পর্কিত, মূল পদক্ষেপটি উপসর্গগুলির জন্য ক্রমবর্ধমান ম্যাক্সিমাকে গণনা করছে, যা এ সম্ভব ? নিশ্চিত নয় যে কোথায় অবদান রাখছি।এলO(n)l


2

আমি এখানে জোরে জোরে চিন্তা করতে যাচ্ছি আপনার দেওয়া ইঙ্গিতগুলির মধ্যে দিয়েই কাজ করছি। আসুন আসল ইঙ্গিতটি বলার জন্য যে আপনাকে প্রথমে চেষ্টা করা উচিত। আমি একটি লোভী অ্যালগরিদমের কথা ভাবতে পারি যাতে সেই সময়টি রয়েছে।O(nl)

সময় জটিলতা অংশ আপনি প্রতিটি মান প্রতিটি occurence গণনা একটি তালিকা রাখতে পারবেন না মানে । এটি কেবল একটি সেট যা সেটে প্রতিটি গণনা ট্র্যাক করে । আপনি একবার ইনপুট সিকোয়েন্স স্ক্যান করে ইনিটালাইজ তালিকা তৈরি করতে পারেন।lগণনা = সি 0 , , সি l এল0..lCount=C0,,Cll

সর্বাধিক এবং ন্যূনতম মান পেতে আপনি এই তালিকাটিকে এ স্ক্যান করতে পারেন । আপনি যদি এই মিড-পয়েন্টের সাথে এর পুরো তালিকাটি পূরণ করে থাকেন তবে আপনার মানটি এই মান এবং সর্বাধিক / মিনিট থেকে সহজতর হবে। এটি মূলত আপনার সবচেয়ে খারাপ পরিস্থিতি, আসুন একে বলে দিন ।ডব্লিউO(l)bbw

বাম থেকে করার জন্য আপনার পথে কাজ করুন । আপনি উভয় থেকে এই elemeent ড্রপ করতে পারেন এবং মিনিট / সর্বোচ্চ পেতে মধ্যে । এখন আমরা লোভী হতে পারি। আমরা নির্বাচন করি না যেহেতু এটি অবশিষ্ট পুরো তালিকাটিকে করে (অ- প্রয়োজনীয়তা পূরণের জন্য) এবং এইভাবে বৈকল্পিকতা বৃদ্ধি করে। আমরা যে সর্বনিম্ন মানটি বেছে নিতে পারি তা হ'ল । যদি গ্রহণযোগ্য ব্যাপ্তিতে থাকে তবে আমরা এটিকে নির্বাচন করি, যদি সর্বনিম্ন ব্যবহারের চেয়ে সীমার নীচে থাকে। এটি প্রদত্ত জ্ঞাত প্রতিবন্ধকতাগুলিতে হ্রাস করে । গণনা [ i + 1 ] [ n ] ( l ) i > biCountb[i+1]b[n]O(l) বি [ আমি - 1 ] আই বি ibi>bwb[i1]aibi

এটি কেবল একটি ধারণা, সম্ভবত আমি ভাগ্যবান এবং এটি আপনাকে সঠিক দিকে নির্দেশ করে। এই অ্যালগরিদম হয়ত কাজ করতে পারে না (এটি আমার কয়েকটি সাধারণ পরীক্ষার জন্য করে) তবে এটি প্রদত্ত ইঙ্গিতগুলির সাথে মেলে, তাই সম্ভবত এটি সহায়ক। যদি সঠিক হয় তবে দেখতে পারা সহজ যে অংশটি অবশ্যই ফেলে দেওয়া যেতে পারে , এমনকি আরও সম্পর্কে, আমি নিশ্চিত নই।O(l)O(logl)


2

এখানে অধ্যাপকের সমাধান রয়েছে, যাকে তিনি "হ্রাস" বলেছেন: থেকে পর্যন্ত প্রতিটি জন্য সমাধান তৈরির চেষ্টা করুন যদি আমরা জানতে পারি যে বিচ্যুতি চেয়ে কম বা সমান । প্রথম যার জন্য কোনও সমাধান পাওয়া যায় তা হ'ল ন্যূনতম বিচ্যুতি। সময়ে বিচ্যুতি অনুসারে আমরা একটি সমাধান খুঁজে পেতে পারি । সুতরাং চলমান সময় হল । তারপরে, রৈখিক অনুসন্ধান ব্যবহার না করে, আমরা সবচেয়ে ছোট বিচ্যুতি নির্ধারণ করতে বাইনারি অনুসন্ধান ব্যবহার করতে পারি যার সমাধান সমাধান সম্ভব। এটি চলমান সময়কে হ্রাস করে , যা ।0 l i i O ( n ) ( এন )i0liiO(n)O(nl)O(nlogl)O(nl4)


4
সুতরাং একটি কৌতুক ছিল ... কিন্তু আমি আরো দ্বারা চক্রান্ত করছি "আমরা একটি সমাধান হে (ঢ) সময় চ্যুতির নিরিখে জানতে পারেন" .. ওটা কেমন না আকর্ষণীয় অংশ? O(nl4)
jmad

@jmad দেওয়া , প্রতিটি জন্য গ্রহণ সর্বনিম্ন মান যা অন্তত সব পূর্ববর্তী হিসাবে বড় হিসাবে হিসাবে , এবং যা বেশী হয় থেকে দূরে । আমরা যদি এরকম কোনও মূল্য খুঁজে না পাই তবে এর অর্থ কী? এর মানে আগের বেশি হয় চেয়ে বড় । সুতরাং একটি পূর্ববর্তী বেশী চেয়ে বড় । সুতরাং এর যে মান সম্ভবপর ছিল না। আপনি যদি এইরকম আটকে না গিয়ে মানগুলি দিয়ে থাকেন তবে আপনি জন্য একটি সমাধান খুঁজে পেয়েছেন আমি একটি টি আমি একটি একটি টনijbjbkiajbtiajatএকটি আমি এন আমি হে ( )2iajiniব্যাকট্রাকিং ছাড়াই, সময় । O(n)
jwg

ও (এন লগ এল) একটি শক্তিশালী ইঙ্গিত হত যে আপনাকে 0 থেকে l এর পরিসীমা পর্যন্ত কিছু বাইনারি অনুসন্ধান করতে হবে।
gnasher729

0

আমি মনে করি এটি ও (এন) এ করণীয় হওয়া উচিত।

অনুরূপ সমস্যাটি গ্রহণ করুন: , 1 ≤ i ≤ n, এবং d ≥ 0 দেওয়া হয়েছে, সন্ধান করুন যেমন সকলের জন্য, বা দেখান যে এটি সম্ভব নয়। এটি ও (এন) এ করা যেতে পারে, এবং বাইনারি অনুসন্ধান ব্যবহার করে ও (এন লগ এল) এর মূল সমস্যাটি সমাধান করা হবে।aibi|aibi|d

এখন যদি আমি ≤ j যেমন এ_আই - এ_জে> 2 ডি থাকে তবে এর কোনও সমাধান নেই (কারণ )।biaid,bjaj+d<ai2d+d=aidbi

তবে যদি আমি_আই - এ_জ ≤ 2 ডি সকল ক্ষেত্রেই করি তবে আমি মনে করি একটি সমাধান সর্বদা পাওয়া যাবে। সুতরাং আমাদের যা করতে হবে তা হ'ল সমস্ত i ≤ j এর জন্য m = সর্বোচ্চ (a_i - a_j) খুঁজে বের করুন এবং d = মেঝে ((মি + 1) / 2) চয়ন করুন। সর্বাধিক এটি ও (এন) এ পাওয়া যাবে।


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