वर्टिकल स्टिक चुनौती के लिए कैसे संपर्क करें


23

यह समस्या interviewstreet.com से ली गई है

हम पूर्णांकों की एक सरणी दिया जाता है प्रतिनिधित्व करता है कि रेखा खंड ऐसे खंड के अंतिम बिंदुओं कि कर रहे हैं और । कल्पना करें कि प्रत्येक खंड के शीर्ष से एक क्षैतिज किरण को बाईं ओर गोली मारी जाती है, और यह किरण तब रुकती है जब वह किसी अन्य खंड को स्पर्श करती है या यह y- अक्ष को हिट करती है। हम n पूर्णांक, की एक सरणी का निर्माण , जहां खंड के ऊपर से रे शॉट की लंबाई के बराबर है । हम ।Y={y1,...,yn}ni(i,0)(i,yi)v1,...,vnviiV(y1,...,yn)=v1+...+vn

उदाहरण के लिए, यदि हमारे पास , तो , जैसा कि नीचे दी गई तस्वीर में दिखाया गया है:Y=[3,2,5,3,3,4,1,2][v1,...,v8]=[1,1,3,1,1,3,1,2]

यहां छवि विवरण दर्ज करें

के प्रत्येक क्रमपरिवर्तन के लिए , हम गणना कर सकते हैं । हम एक समान रूप से यादृच्छिक क्रमपरिवर्तन का निर्णय लेते हैं के , क्या की उम्मीद मूल्य है ?[ 1 , , एन ] वी (p[1,...,n]V(yp1,...,ypn)p[1,...,n]V(yp1,...,ypn)

अगर हम भोली दृष्टिकोण का उपयोग करके इस समस्या को हल करते हैं तो यह कुशल नहीं होगा और व्यावहारिक रूप से लिए हमेशा के लिए चलेगा । मेरा मानना है कि हम indepdently की उम्मीद मूल्य की गणना करके इस समस्या से संपर्क कर सकता प्रत्येक छड़ी के लिए लेकिन मैं अभी भी पता करने के लिए मौसम इस समस्या के लिए एक और कुशल तरीका है की जरूरत है। किस आधार पर हम प्रत्येक छड़ी के लिए स्वतंत्र रूप से अपेक्षित मूल्य की गणना कर सकते हैं?v in=50vi


आप अपेक्षा की रैखिकता का उपयोग कर सकते हैं। यह सवाल शायद अधिक उपयुक्त math.SE पर है

जवाबों:


23

एक अलग समस्या की कल्पना करें: यदि आपको n स्लॉट्स में बराबर हाइट्स की स्टिक रखनी होती है तो स्टिक के बीच अपेक्षित दूरी (और पहली स्टिक और एक नॉटिकल स्लॉट के बीच अपेक्षित दूरी 0 , और आखिरी स्टिक और एक नॉटी के बीच की अपेक्षित दूरी स्लॉट n + 1 ) n + 1 हैकश्मीरn0n+1n+1k+1 चूंकिk+1अंतराल एक लंबाईमें फिट होने के लिए हैंn+1

इस समस्या पर लौटते हुए, एक विशेष स्टिक में रुचि होती है कि कितने स्टिक्स (स्वयं सहित) उच्च या उच्चतर हैं। यदि यह संख्या , तो इसके बाईं ओर अपेक्षित अंतर भी n + 1 हैkn+1k+1

इसलिए एल्गोरिथ्म बस प्रत्येक स्टिक के लिए इस मान को खोजने और उम्मीद को जोड़ने के लिए है। उदाहरण के लिए, की ऊँचाई से शुरू होने वाली, अधिक से अधिक या समान ऊँचाई वाली छड़ियों की संख्या है [ 5 , 7 , 1 , 5 , 5 , 2 , 8 , Expect ] अतः अपेक्षा ९ है[3,2,5,3,3,4,1,2][5,7,1,5,5,2,8,7]96+98+92+96+96+93+99+98=15.25

यह प्रोग्राम करना आसान है: उदाहरण के लिए आर में एक पंक्ति

V <- function(Y){ (length(Y) + 1) * sum( 1 / (rowSums(outer(Y, Y, "<=")) + 1) ) }

मूल समस्या में नमूना आउटपुट में मान देता है

> V(c(1,2,3))
[1] 4.333333
> V(c(3,3,3))
[1] 3
> V(c(2,2,3))
[1] 4
> V(c(10,2,4,4))
[1] 6
> V(c(10,10,10,5,10))
[1] 5.8
> V(c(1,2,3,4,5,6))
[1] 11.15

1
बहुत ही रोचक। क्या आप कृपया थोड़ा विस्तार से बता सकते हैं कि लाठी के बीच अपेक्षित दूरी क्यों है ; जैसा कि यह स्पष्ट नहीं है (कम से कम मेरे लिए) यह कैसे गणना की गई थी। धन्यवाद। (n+1)/(k+1)
एम। अलागन M.

बराबर ऊंचाई वाली छड़ियों के मेरे पहले मामले में , k + 1 अंतराल से भरे जाने के लिए एक लंबाई n + 1 है, इसलिए औसत अंतराल एक दूसरे को विभाजित करने से आता है। यह किसी विशेष छड़ी (और अंतिम छड़ी से n + 1 तक ) से पहले अपेक्षित अंतराल (या क्षैतिज किरण ) है। यह मूल प्रश्न में स्थानांतरित हो जाता है, स्टिक खाते में ले जाता है जो किसी विशेष स्टिक की तुलना में अधिक या अधिक होता है। kn+1k+1n+1
हेनरी

बहुत अच्छा। यह पूरी तरह से मेरे समाधान का निर्वाह करता है; सभी ऊंचाइयों अलग हैं, तो E[V]=k=1nn+1k+1=(n+1)(Hn+11)=(n+1)Hnn
जेफ ईई

2
@ हेनरी: k के लिए समान ऊँचाई, n स्लॉट समस्या, औसत लंबाई = (n + 1) / (k + 1) के लिए आपका तर्क क्या था? यदि मेरे पास k लाठी है और मैं उन k kicks में प्रत्येक k की छँटाई में उन छड़ियों में से किसी एक की औसत किरण लंबाई जानना चाहता हूँ, तो यह वास्तव में आपके परिणाम के बराबर होता है, लेकिन मुझे समझ नहीं आता कि क्यों। क्या तर्क है या क्या आपने इसे गणितीय रूप से करने से घटाया है जो मैंने 1 स्टिक और एन स्लॉट के लिए वर्णित किया है, फिर 2 स्टिक और एन, स्लॉट, ... के स्टिक्स, एन स्लॉट, और ध्यान दें कि यह बराबर (एन + 1) / ( k + 1)? आप एक n + 1 स्लॉट जोड़ने का उल्लेख करते हैं। यह बहुत ही सहज ज्ञान युक्त लगता है।
अलेक्जेंड्रे

3
यह एक ऐसा सवाल है जो मैंने पहले निपटा लिया है। सीटों और k + 1 लोगों के साथ एक गोल मेज के साथ शुरू करें और उन्हें यादृच्छिक पर सीट दें। व्यक्तियों के बीच की दूरियाँ स्पष्ट रूप से औसत ( n + 1 ) / ( k + 1 ) के साथ होती हैं । अब n + 1 वें व्यक्ति पर तालिका को तोड़ें , उस व्यक्ति और उनकी सीट को हटा दें, और तालिका को सीधा करें। अब आप यहाँ n सीटों और k लोगों के साथ प्रश्न करते हैं लेकिन समान iid संपत्ति और समान माध्य है। ( महीने के लिए दुर्लभ कविता खोजें )n+1k+1(n+1)/(k+1)n+1thnk
हेनरी

11

हेनरी का समाधान इस एक की तुलना में सरल और अधिक सामान्य दोनों है!


रैंडमाइज्ड क्विकॉर्ट द्वारा की गई तुलना की अपेक्षा लगभग आधी है।E[V]

मान लें कि छड़ें अलग-अलग ऊंचाइयों पर हैं , तो हम निम्नानुसार लिए एक बंद-फॉर्म समाधान प्राप्त कर सकते हैं ।E[Y]

किसी भी सूचकांक के लिए , चलो एक्स मैं j = 1 यदि Y j = अधिकतम { Y मैं , , Y j } और X i j = 0 अन्यथा। (यदि Y के तत्व अलग नहीं हैं , तो X i j = 1 का अर्थ है कि Y j , कड़ाई से { Y i के हर तत्व से अधिक है)ijXij=1Yj=max{Yi,...,Yj}Xij=0YXij=1Yj ।){Yi,,Yj1}

तो फिर किसी भी सूचकांक के लिए , हम वी जे = Σ जे मैं = 1 एक्स मैं j (आप क्यों? दिखाई दे रही है) और इसलिए वी = n Σ j = 1 वी जे = n Σ j = 1 जे Σ मैं = 1 एक्स मैं जेjvj=i=1jXij

V=j=1nvj=j=1ni=1jXij.

उम्मीद की linearity तुरंत कि तात्पर्य

E[V]=E[1ijnXij]=1ijnE[Xij].

क्योंकि या तो 0 या 1 है , हमारे पास E [ X i j ] = Pr [ X i j = 1 ] हैXij01E[Xij]=Pr[Xij=1]

अंत में-और यह है महत्वपूर्ण बिट क्योंकि में मानों हैं अलग और समान रूप से permuted, सबसेट के प्रत्येक तत्व { Y मैं , , वाई जे } समान रूप से उस सबसेट में सबसे बड़ा तत्व होने की संभावना है । इस प्रकार, Pr [ X i j = 1 ] = 1Y{Yi,...,Yj} । (के तत्वों, तोYअलग नहीं कर रहे हैं, हम अभी भी हैपीआर[एक्समैंj=1]1Pr[Xij=1]=1ji+1Y )Pr[Xij=1]1ji+1

और अभी हमारे पास कुछ गणित है।

E[V]=j=1ni=1jE[Xij][linearity]=j=1ni=1j1ji+1[uniformity]=j=1nh=1j1h[h=ji+1]=h=1nj=hn1h[1hjn]=h=1nnh+1h=((n+1)h=1n1h)(h=1n1)=(n+1)Hnn
where Hn denotes the nth harmonic number.

Now it should be trivial to compute E[V] (up to floating point precision) in O(n) time.


Does this assume that the sticks are of distinct height?
Aryabhata

Yes, it does assume distinct heights. (Apparently, I misread the question.) The equivalence with randomized quicksort still stands when there are ties, but not the closed-form solution.
JeffE

4

As mentioned in the comments, you can use Linearity of Expectation.

Sort the y: y1y2yn.

For each yi consider the expected value of vi=E[vi].

Then E[i=1nvi]=i=1nE[vi]

One straight-forward and naive way to compute E[vi] would be first fix a position for yi. Say j.

Now compute the probability that at position j1 you have a value yi.

Then the probability that at j1 you have a value <yi and at j2 you have a value yi

and so on which will allow you to compute E[vi].

You can probably make it faster by actually doing the math and getting a formula (I haven't tried it myself, though).

Hope that helps.


3

Expanding on the answer of @Aryabhata:

Fix an i, and assume the item yi is at position j. The exact value of the height is immaterial, what matters is whether the items are greater than or equal to yi or not. Therefore consider the set of items Z(i), where zk(i) is 1 if ykyi, and zk(i) is 0 otherwise.

A permutation on the set Z(i) induces an corresponding permutation on the set Y. Consider for instance the following permuation of the set Z(i): "01000(1)". The item zi(i) is the one is brackets, at position j, and the items denoted by "" don't matter.

The value of vi is then 1 plus the length of the run of consective zeros just to the left of zi(i). It follows that E(vi) is actually 1 plus the expected length of consecutive zeors, until the first "1" is met, if we pick at most j1 bits from the set Z(i)zi(i)(without replacement). This is reminiscent of the geometric distribution, except that it would be without replacement (and bounded number of draws). The expectation is to be taken on j as well, as a uniform choice on the set of positions {1,,n}.

Once this is computed (along these lines), we can follow the lines of @Aryabhata's answer.


-2

I dont really understand what do you demend, from tags it seems you are looking for an algorithm.

if so, what is the expected time complexity? by saying: "If we solve this problem using the naive approach it will not be efficient and run practically forever for n=50." it seems to me that your naive approach solves it in exponential time.

i do have a O(n^2) algorithm in mind tho.

assume int y[n], v[n] where v[i] initialized with 1; as described in the question
for (i=1;i<n;i++) 
   for ( j=i-1 ; j>=0 && y[j]<y[i] ; j--) v[i]++;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.