में चुने गए आइटमों से सभी संयोजन उत्पन्न करना मुझे यह पता लगाना है कि कोई विशेष एल्गोरिदम पहले से मौजूद है या नहीं। मैं इसे किसी एप्लिकेशन में उपयोग करना चाहता हूं, लेकिन मैंने यह भी देखा है कि यह कई Project Euler समस्याओं में भी आया है।एल्गोरिदम - अनुक्रम
मैं एक विशिष्ट प्रकार के क्रमपरिवर्तन/आउटपुट सेट की गणना करने के लिए देख रहा हूं, जहां अगला आइटम केवल निम्न सेट में विकल्पों के सीमित सेट से होना चाहिए।
उदाहरण के लिए, मैं 3 सरणियों
$a1 = array("a", "b", "c");
$a2 = array("d", "e", "f");
$a3 = array("g", "h", "i");
मैं एक दृश्य प्रत्येक सरणी, आदेश में चुना से अधिकतम 1 तत्व से युक्त की सभी संभावनाओं को उत्पन्न करने के लिए देख रहा हूँ मिल गया है कहना। यही कारण है कि आउटपुट के रूप में कहने के लिए है, मैं देखना चाहते हैं:
adg aeg afg
adh aeh afh
adi aei afi
bdg beg bfg
bdh beh bfh
bdi bei bfi
cdg ceg cfg
cdh ceh cfh
cdi cei cfi
या तो PHP या जावास्क्रिप्ट में एल्गोरिथ्म को लागू करने के देख रहे हैं। संक्षेप में यह तत्वों की परिवर्तनीय संख्या वाले सरणी की एक चर संख्या से गुज़र जाएगा, और अनुक्रमिक क्रम में होने वाले अनुक्रमों की सभी संभावनाओं को आउटपुट करेगा।
क्या यह अस्तित्व में है?
यदि हां, तो इसे क्या कहा जाता है? तकनीकी रूप से यह एक क्रमपरिवर्तन या संयोजन से संयोजन है जो मैं दोनों के बारे में जानता हूं।
संपादित करें: डैनियल फिशर मुझे सूचित किया है कि यह एक कार्तीय उत्पाद है, यहाँ एक कार्यान्वयन taken from the PHP website है:
function array_cartesian_product($arrays)
{
$result = array();
$arrays = array_values($arrays);
$sizeIn = sizeof($arrays);
$size = $sizeIn > 0 ? 1 : 0;
foreach ($arrays as $array)
$size = $size * sizeof($array);
for ($i = 0; $i < $size; $i ++)
{
$result[$i] = array();
for ($j = 0; $j < $sizeIn; $j ++)
array_push($result[$i], current($arrays[$j]));
for ($j = ($sizeIn -1); $j >= 0; $j --)
{
if (next($arrays[$j]))
break;
elseif (isset ($arrays[$j]))
reset($arrays[$j]);
}
}
return $result;
}
ठीक है, हालांकि मैं अवधारणा को सारणीबद्ध करना चाहता हूं ताकि मैं इसे एक चरणीय संख्या के सरणी के विरुद्ध चला सकूं। – barfoon