কিভাবে বাড়ানোর লক্ষ্যে মধ্যে


9

আমি অনেক অ্যালগরিদমিক সমস্যা দেখতে পাই যা সর্বদা কিছুটা দীর্ঘায়িত করে:

আপনি একটি আছে পূর্ণসংখ্যা অ্যারের , আপনি বের করতে হবে যেমন যে সম্ভব মধ্যে সময়।h[1..n]0i,j(h[j]h[i])(ji)O(n)

স্পষ্টতই সময় সমাধানটি সমস্ত জোড় বিবেচনা করা হয়, তবে, বৈশিষ্ট্য সম্পর্কে অন্য কিছু না জেনেও আমরা এর বহিঃপ্রকাশকে সর্বাধিকতর করার কোনও উপায় আছে কি?O(n2)O(n)h

আমি যে ধারণাটি ভেবেছিলাম তা হল স্থির করা , তারপরে আমাদের থেকে পর্যন্ত সমান বা এবং যেহেতু স্থির করা হয়েছে, তারপরে আমাদের ।ji1j1argmaxi{(h[j]h[i])(ji)}argmaxi{h[j]jh[j]ih[i]j+h[i]i}jargmaxi{h[j]ijh[i]+ih[i]}

যাইহোক, আমি ভিতরে নির্ভর করে পদ থেকে মুক্তি পাওয়ার কোন উপায় দেখতে পাচ্ছি না । কোন সাহায্য?j


একটি সমাধান কি সহায়ক হবে? O(nlogn)
xskxzr

@xskxzr নিশ্চিত করুন আপনার যদি কিছু আছে
AspiringMat

উত্তর:


5

এটি একটি সমাধান। উইলার্ড ঝান নির্দেশিত একটি সমাধান এই উত্তরের শেষে যুক্ত করা হয়েছে।O(nlogn)O(n)


O(nlogn) সমাধান

বিশ্বাসের জন্য, ।f(i,j)=(h[j]h[i])(ji)

সংজ্ঞা দিন এবং এবং মধ্যে সবচেয়ে ছোট সূচী । একইভাবে, নির্ধারণ করুন এবং এবং মতো বৃহত্তম সূচক । সিক্যুয়েনস এবং সময়ে গণনা করা সহজ ।l1=1lili>li1h[li]<h[li1]r1=nriri<ri1h[ri]>h[ri1]l1,l2,...r1,r2,O(n)

এই ক্ষেত্রে যে কোনও যেমন (অর্থাত্ )) তুচ্ছ। আমরা এখন নগণ্য মামলায় মনোনিবেশ করি focus এই ধরনের ক্ষেত্রে, সমাধানটি খুঁজতে, আমাদের কেবল এই জাতীয় জোড়া বিবেচনা করা উচিত।i<jh[i]<h[j]f(i,j)>0

প্রত্যেকের জন্য যেমন যে যাক হবে বৃহত্তম সূচক যেমন যে আর ক্ষুদ্রতম সূচক হতে যেমন যে , তারপর (অন্যথায় of সংজ্ঞা অনুসারে , এইভাবে সংজ্ঞার সাথে ) এবং একইভাবে । অতএব এর অর্থ আমাদের কেবল জোড়া বিবেচনা করতে হবে যেখানে ।i<jh[i]<h[j]uluivrvjh[lu]h[i]lu+1ilu+1uh[rv]h[j]

(h[rv]h[lu])(rvlu)(h[j]h[i])(rvlu)(h[j]h[i])(ji).
(lu,rv)lu<rv

বোঝাতে , আমরা নিম্নলিখিত থিম আছে।v(u)=argmaxv: lu<rvf(lu,rv)

এক জোড়া যেখানে , এবং যেখানে অস্তিত্ব আছে যেমন যে এবং বা এই ধরনের যে এবং , একটি চূড়ান্ত সর্বোত্তম সমাধান হতে পারে না।(lu,rv)lu<rvu0u<u0v<v(u0)u>u0v>v(u0)

প্রুফ। এর সংজ্ঞা অনুসারে, আমাদের কাছে বা v(u0)

(h[rv(u0)]h[lu0])(rv(u0)lu0)(h[rv]h[lu0])(rvlu0),
(h[rv]h[rv(u0)])lu0+h[lu0](rvrv(u0))+h[rv(u0)]rv(u0)h[rv]rv(u0)0.

আপনি যে ক্ষেত্রে এবং , নোট এবং , এবং এছাড়াও এবং , আমাদের u<u0v<v(u0)h[rv]h[rv(u0)]<0rvrv(u0)>0lu<lu0h[lu]>h[lu0]

(h[rv]h[rv(u0)])lu+h[lu](rvrv(u0))> (h[rv]h[rv(u0)])lu0+h[lu0](rvrv(u0)).

এর অর্থ বা

(h[rv]h[rv(u0)])lu+h[lu](rvrv(u0))+h[rv(u0)]rv(u0)h[rv]rv(u0)>0,
(h[rv(u0)]h[lu])(rv(u0)lu)>(h[rv]h[lu])(rvlu).

সুতরাং হ'ল চেয়ে সমাধান । অন্য মামলার প্রমাণও একই রকম। (lu,rv(u0))(lu,rv)

আমরা প্রথমে গণনা করতে পারি যেখানে সিক্যুয়েন্সের দৈর্ঘ্য , তারপরে এর জন্য মধ্যে সর্বোত্তম সমাধান পুনরাবৃত্তভাবে গণনা করুন এবং , এবং এর জন্য মধ্যে সর্বোত্তম সমাধান এবং । থিম কারণে গ্লোবাল অপটিমাম সমাধান থেকে আসতে হবে ।v(/2)l1,l2,o1(lu,rv)u=1,,/21v=v(/2),v(/2)+1,o2(lu,rv)u=/2+1,/2+2,v=1,,v(/2){(l/2,rv(/2)),o1,o2}


O(n) সমাধান

চলুন যদি । লেমার প্রমাণটিও একটি গুরুত্বপূর্ণ বৈশিষ্ট্য দেখায়: এবং জন্য , যদি , তবে । এর অর্থ ম্যাট্রিক্স সম্পূর্ণ একঘেয়ে ম্যাট্রিক্স যেখানে অনুক্রমের দৈর্ঘ্য (তাই অর্থ শেষ থেকে -th উপাদান), তারপর SMAWK অ্যালগরিদম এর সর্বনিম্ন মান এটি প্রয়োগ করতে পারেন , এর এইভাবে সর্বোচ্চ মান ।f(lu,rv)=lurvu>u0v>v0f(lu0,rv0)f(lu0,rv)f(lu,rv0)>f(lu,rv)M[x,y]:=f(lx,rcy+1)cr1,r2,rcy+1yMf


1
আপনি যা প্রমাণ করেছেন তা হল একটি ম্যাট্রিক্স, সুতরাং বিভাজন এবং বিজয় একটি অ্যালগরিদম দেয়। কিন্তু আপনি আসলে যে প্রমাণ করতে পারে হয় Monge , যাতে SMAWK অ্যালগরিদম প্রয়োগ করা যায়। f(lu,rv)O(nlogn)f(lu,rv)O(n)
উইলার্ড ঝান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.