अधिकतम कैसे करें


9

मुझे कई एल्गोरिथम समस्याएं दिखाई देती हैं जो हमेशा कुछ को कम करती हैं:

आप एक है पूर्णांक सरणी[1 ..n]0h[1..n]0, आपको खोजने की जरूरत है मैं,जेi,j इस तरह के अधिकतम ([जे]-[मैं])(जे-मैं)(h[j]h[i])(ji) में हे(n)O(n) समय।

जाहिर है हे(n2)O(n2) समय समाधान,, सभी जोड़ों को विचार करने के लिए है लेकिन वहाँ किसी भी तरह से हम में अभिव्यक्ति को अधिकतम कर सकते है हे(n)O(n) के गुणों के बारे में कुछ और जानने के बिना h?

मुझे लगा कि एक विचार को ठीक करना है जेj, तो हमें खोजने की जरूरत है मैं*i से 11 सेवा जे-1j1 के बराबर है argmaxमैं{([जे]-[मैं])(जे-मैं)}argmaxi{(h[j]h[i])(ji)} या argmaxमैं{[जे]जे-[जे]मैं-[मैं]जे+[मैं]मैं}argmaxi{h[j]jh[j]ih[i]j+h[i]i} और तब से जेj तय है, तो हमें जरूरत है argmaxमैं{-[जे]मैं-जे[मैं]+मैं[मैं]}argmaxi{h[j]ijh[i]+ih[i]}

हालाँकि, मुझे इससे छुटकारा पाने का कोई रास्ता नहीं दिख रहा है जेjअंदर निर्भर शर्तें। कोई मदद?


विल ए हे(nलॉगn)O(nlogn)समाधान सहायक हो सकता है?
xskxzr

@xskxzr सुनिश्चित करें कि आपके पास कोई भी है
AspiringMat

जवाबों:


5

यह एक हे(nलॉगn)O(nlogn)समाधान। एकहे(n)O(n)समाधान द्वारा विलार्ड झान ने बताया इस उत्तर के अंतिम में जोड़ दिया जाता है।


हे(nलॉगn)O(nlogn) समाधान

convience के लिए, निरूपित (मैं,जे)=([जे]-[मैं])(जे-मैं)f(i,j)=(h[j]h[i])(ji)

परिभाषित करें एल1=1l1=1, तथा एलमैंli सबसे छोटा सूचकांक हो एलमैं>एलमैं-1li>li1 तथा [एलमैं]<[एलमैं-1]h[li]<h[li1]। इसी तरह, परिभाषित करेंआर1=nr1=n, तथा आरमैंri ऐसा सबसे बड़ा सूचकांक है आरमैं<आरमैं-1ri<ri1 तथा [आरमैं]>[आरमैं-1]h[ri]>h[ri1]। दृश्योंएल1,एल2,l1,l2,... तथा आर1,आर2,...r1,r2, में गणना करने के लिए आसान कर रहे हैं हे(n)O(n) समय।

मामला जहां नहीं हैं मैं<जेi<j ऐसा है कि [मैं]<[जे]h[i]<h[j] (अर्थात (मैं,जे)>0f(i,j)>0) तुच्छ है। अब हम गैर-तुच्छ मामलों पर ध्यान केंद्रित करते हैं। ऐसे मामलों में, समाधान खोजने के लिए, हमें केवल ऐसे जोड़ों पर विचार करने की आवश्यकता है।

प्रत्येक के लिए मैं<जेi<j ऐसा है कि [मैं]<[जे]h[i]<h[j], चलो यूu ऐसा सबसे बड़ा सूचकांक है एलयूमैंlui, तथा vv सबसे छोटा सूचकांक हो आरvजेrvj, फिर [एलयू][मैं]h[lu]h[i] (अन्यथा एलयू+1मैंlu+1i की परिभाषा के द्वारा एलयू+1lu+1, इस प्रकार की परिभाषा के विपरीत है यूu), और इसी प्रकार [आरv][जे]h[rv]h[j]। इसलिये ([आरv]-[एलयू])(आरv-एलयू)([जे]-[मैं])(आरv-एलयू)([जे]-[मैं])(जे-मैं)

(h[rv]h[lu])(rvlu)(h[j]h[i])(rvlu)(h[j]h[i])(ji).
इसका मतलब है कि हमें केवल जोड़े पर विचार करने की आवश्यकता है (एलयू,आरv)(lu,rv) कहाँ पे एलयू<आरvlu<rv

निरूपित v(यू)=आर्गअधिकतमv: एलयू<आरv(एलयू,आरv)v(u)=argmaxv: lu<rvf(lu,rv), हमारे पास निम्नलिखित लैमा है।

एक जोड़ा (एलयू,आरv)(lu,rv) कहाँ पे एलयू<आरvlu<rv, और जहाँ मौजूद है यू0u0 ऐसा है कि यू<यू0u<u0 तथा v<v(यू0)v<v(u0) या ऐसा यू>यू0u>u0 तथा v>v(यू0)v>v(u0), एक अंतिम इष्टतम समाधान नहीं हो सकता है।

सबूत। की परिभाषा के अनुसारv(यू0)v(u0), हमारे पास है ([आरv(यू0)]-[एलयू0])(आरv(यू0)-एलयू0)([आरv]-[एलयू0])(आरv-एलयू0),

(h[rv(u0)]h[lu0])(rv(u0)lu0)(h[rv]h[lu0])(rvlu0),
या ([आरv]-[आरv(यू0)])एलयू0+[एलयू0](आरv-आरv(यू0))+[आरv(यू0)]आरv(यू0)-[आरv]आरv(यू0)0।
(h[rv]h[rv(u0)])lu0+h[lu0](rvrv(u0))+h[rv(u0)]rv(u0)h[rv]rv(u0)0.

In the case where u<u0u<u0 and v<v(u0)v<v(u0), note h[rv]h[rv(u0)]<0h[rv]h[rv(u0)]<0 and rvrv(u0)>0rvrv(u0)>0, and also lu<lu0lu<lu0 and h[lu]>h[lu0]h[lu]>h[lu0], we have (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]h[rv(u0)])lu0+h[lu0](rvrv(u0)).

This means (h[rv]h[rv(u0)])lu+h[lu](rvrv(u0))+h[rv(u0)]rv(u0)h[rv]rv(u0)>0,

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

So (lu,rv(u0))(lu,rv(u0)) is a strictly better solution than (lu,rv)(lu,rv). Proof for the other case is similar.

We can compute v(/2)v(/2) firstly where is the length of the sequence l1,l2,l1,l2,, then recursively compute the optimal solution o1o1 among (lu,rv)(lu,rv)'s for u=1,,/21u=1,,/21 and v=v(/2),v(/2)+1,v=v(/2),v(/2)+1,, and the optimal solution o2o2 among (lu,rv)(lu,rv)'s for u=/2+1,/2+2,u=/2+1,/2+2, and v=1,,v(/2)v=1,,v(/2). Due to the lemma, the global optimum solution must come from {(l/2,rv(/2)),o1,o2}{(l/2,rv(/2)),o1,o2}.


O(n)O(n) Solution

Let f(lu,rv)=f(lu,rv)= if lurvlurv. The proof of the lemma also shows an important property: for u>u0u>u0 and v>v0v>v0, if f(lu0,rv0)f(lu0,rv)f(lu0,rv0)f(lu0,rv), then f(lu,rv0)>f(lu,rv)f(lu,rv0)>f(lu,rv). This means the matrix M[x,y]:=f(lx,rcy+1)M[x,y]:=f(lx,rcy+1) is a totally monotone matrix where cc is the length of the sequence r1,r2,r1,r2, (so rcy+1rcy+1 means the y-th element from the end), then SMAWK algorithm can apply to find the minimum value of M, thus the maximum value of f.


1
What you proved is that f(lu,rv) is a monotone matrix, so divide and conquer gives an O(nlogn) algorithm. But you could actually prove that f(lu,rv) is Monge, so that the O(n) SMAWK algorithm can be applied.
Willard Zhan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.