2010-03-15 13 views
9

मुझे समान रूप सेn किसी सरणी से तत्वों का चयन करें। मुझे लगता है कि व्याख्या करने का सबसे अच्छा तरीका उदाहरण के लिए है।सरणी से एन elems का चयन करें

कहते हैं कि मैं है:

सरणी [0,1,2,3,4] और मैं 3 संख्या को चुनने के लिए .. 0,2,4 की जरूरत है।

बेशक, अगर सरणी लंबाई < = n, मुझे बस पूरी सरणी वापस करने की आवश्यकता है।

मैं बहुत यकीन है कि वहाँ इस के लिए एक परिभाषित एल्गोरिथ्म है,, खोज करने के लिए कोशिश कर रहा है और मैं एल्गोरिदम के परिचय पर एक नज़र लिया, लेकिन कुछ भी है कि मेरी जरूरतों को पूरा (शायद यह अनदेखी)

नहीं पा सके हूँ

मेरी समस्या यह है कि मैं इसे किसी भी सरणी [p..q] तक स्केल करने का तरीका नहीं समझ सकता, एन समान रूप से तत्वों का चयन कर रहा हूं।

टिप्पणी: मैं बस यहाँ तक कि ऊपर के उदाहरण से तत्वों ..

एक जोड़े अन्य उदाहरण का चयन नहीं कर सकते हैं;

सरणी [0,1,2,3,4,5,6], 3 तत्व; मुझे 0,3,6
सरणी [0,1,2,3,4,5], 3 तत्व प्राप्त करने की आवश्यकता है;

अधिक उदाहरण:
सरणी [0,1,2], 2 elems: 0,2
सरणी [0,1 मैं 0, 2 या 3, और 5

संपादित प्राप्त करने की आवश्यकता , 2,3,4,5,6,7], 5 elems: 0,2, या तो 3 या 4, 5,7

और हाँ, मैं हमेशा पहले और अंतिम तत्वों को शामिल करना चाहता हूं।

संपादित करें 2:

क्या मैं सोच रहा था .. की तरह पहले + पिछले तत्व कुछ था, तो माध्यिका मान का उपयोग कर अपने रास्ते तक काम करते हैं। हालांकि ऐसा करने की कोशिश करते समय मैं अटक गया/उलझन में आया।

मैं आपके द्वारा पोस्ट किए जा रहे अलगो पर एक नज़र डालेगा। धन्यवाद!

संपादित करें 3:

यहाँ पीएचपी साथ incrediman समाधान की एक को souped संस्करण है। चाबियाँ बरकरार रखते हुए, सहयोगी सरणी के साथ भी काम करता है।

<?php 

/** 
* Selects $x elements (evenly distributed across $set) from $set 
* 
* @param $set array : array set to select from 
* @param $x int  : number of elements to select. positive integer 
* 
* @return array|bool : selected set, bool false on failure 
*/ 
///FIXME when $x = 1 .. return median .. right now throws a warning, division by zero 

function select ($set, $x) { 
    //check params 
    if (!is_array($set) || !is_int($x) || $x < 1) 
     return false; 

    $n = count($set); 

    if ($n <= $x) 
     return $set; 

    $selected = array(); 
    $step  = ($n - 1)/($x - 1); 
    $keys  = array_keys ($set); 
    $values = array_values($set); 

    for ($i=0; $i<$x; $i++) { 
     $selected[$keys[round($step*$i)]] = $values[round($step*$i)]; 
    } 

    return $selected; 
} 

?> 

आप शायद एक Iterator लागू कर सकते हैं लेकिन मैं यह है कि अब तक लेने की जरूरत नहीं है।

+0

क्या नंबर आप का चयन करना चाहिए? अपने पैटर्न के बारे में और अधिक विशिष्ट बनें। –

+0

मुझे लगता है कि आपको कुछ और उदाहरण चाहिए, क्योंकि मुझे अभी भी समझ में नहीं आता कि आप क्या करने की कोशिश कर रहे हैं। चुनने के लिए लंबे सरणी और तत्वों की एक अलग संख्या के बारे में क्या? –

+0

यदि मैं इसे सही तरीके से पढ़ रहा हूं, तो ओपी कई सरणी तत्वों का चयन करना चाहता है जिनके सूचकांक कुछ नियमित पैटर्न का पालन करते हैं। मुझे लगता है कि रेक्स केर का जवाब बेहतर तरीके से समझा सकता है कि यहां क्या पूछा जा रहा है। – bta

उत्तर

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