2012-02-22 8 views
11

आप एक पास में अज्ञात लंबाई के साथ लिंक्ड सूची में एक समान यादृच्छिक तत्व कैसे लेंगे या दो पास नहीं होंगे?अज्ञात लंबाई के साथ लिंक्ड सूची में आप एक समान यादृच्छिक तत्व कैसे चुनेंगे?

+4

मुझे डर है कि आपको अपने प्रश्न में थोड़ा और प्रयास करना होगा और आप क्रिस्टल को स्पष्ट कर सकते हैं कि आप क्या पूछ रहे हैं –

+0

ठीक है। अज्ञात लंबाई के साथ लिंक्ड सूची में आप एक समान यादृच्छिक तत्व कैसे चुनेंगे? – exlux15

+0

यदि यह आपका प्रश्न है, तो यह एक दिलचस्प सवाल है। कृपया तदनुसार अपना प्रश्न संपादित करें और मैं इसे –

उत्तर

22

जलाशय नमूना http://en.wikipedia.org/wiki/Reservoir_sampling का उपयोग करें। आपको डेटा के केवल एक ही पास की आवश्यकता है।

एक तत्व उठा लिए: kth तत्व के लिए,

  1. पहला तत्व उठाओ (संभावना 1)
  2. बाद में यह संभावना 1/k साथ लेने (यानी kth तत्व के साथ मौजूदा चयन की जगह)

मैं आपको यह साबित करने दूंगा कि यह परिणाम तत्वों के समान चयन में हैं।

+0

मैंने इसका उपयोग करने की कोशिश की लेकिन यह के यादृच्छिक तत्वों को चुन देगा। लेकिन मुझे केवल पहले तत्व का चयन करने की आवश्यकता होगी – exlux15

+0

@ एनीलबूरूरम के = 1 का उपयोग करें? वैसे भी, पोस्ट में वर्णित एल्गोरिदम (विकी नहीं) एक तत्व मामले के लिए है। – ElKamina

+1

ठीक है अगर मैं सूची को पार करने के लिए ++ लंबाई के साथ थोड़ी देर लूप का उपयोग करता हूं। यदि मैं i = rand()% लंबाई का उपयोग करता हूं, तो क्या मैं वर्तमान नोड पर यादृच्छिक पसंद करूंगा? – exlux15

संबंधित मुद्दे