2010-07-21 14 views
8

मैं एक ईकॉमर्स साइट बना रहा हूं, और मुझे डेटाबेस से आधे रास्ते उचित समूहों में खींचने वाले उत्पादों को सॉर्ट करने के लिए एक अच्छा एल्गोरिदम विकसित करने में समस्या हो रही है। मैंने केवल उच्चतम मूल्य को 4 में विभाजित करने की कोशिश की है, और प्रत्येक समूह को उस आधार पर आधारित किया है। मैंने माध्य के आधार पर मानक विचलन भी करने की कोशिश की। दोनों कीमतों के साथ परिणाम हो सकते हैं कि कोई उत्पाद नहीं गिर जाएगा, जो एक उपयोगी फ़िल्टरिंग विकल्प नहीं है।मूल्य फ़िल्टर ग्रुपिंग एल्गोरिदम

मैंने उत्पादों के क्वार्टाइल लेने का भी प्रयास किया, लेकिन मेरी समस्या यह है कि कीमत $ 1 आइटम से $ 4,000 तक है। $ 4,000 लगभग कभी नहीं बेचते हैं, और बहुत कम महत्वपूर्ण हैं, लेकिन वे मेरे परिणामों को झुकाव रखते हैं।

कोई विचार? मैं आँकड़े कक्षा में अधिक ध्यान दिया जाना चाहिए था ...

अद्यतन:

मैं तरीकों एक सा संयोजन समाप्त हो गया। मैंने क्वार्टाइल/बाल्टी विधि का उपयोग किया, लेकिन कुछ श्रेणियों को हार्डकोडिंग करके इसे थोड़ा सा हैक किया जिसके भीतर अधिक संख्या में मूल्य समूह दिखाई देंगे।

//Price range algorithm 

sort($prices); 

//Divide the number of prices into four groups 
$quartilelength = count($prices)/4; 

//Round to the nearest ... 
$simplifier = 10; 

//Get the total range of the prices 
$range = max($prices)-min($prices); 

//Assuming we actually are working with multiple prices 
if ($range>0) 
{ 
    // If there is a decent spread in price, and there are a decent number of prices, give more price groups 
    if ($range>20 && count($prices) > 10) 
    { 
     $priceranges[0] = floor($prices[floor($quartilelength)]/$simplifier)*$simplifier; 
    } 

    // Always grab the median price 
    $priceranges[1] = floor($prices[floor($quartilelength*2)]/$simplifier)*$simplifier; 

    // If there is a decent spread in price, and there are a decent number of prices, give more price groups 
    if ($range>20 && count($this->data->prices) > 10) 
    { 
     $priceranges[2] = floor($prices[floor($quartilelength*3)]/$simplifier)*$simplifier; 
    } 
} 
+0

ऐसा लगता है कि यदि आप वास्तविक बिक्री जानकारी के साथ उत्पाद जानकारी (जिसमें केवल कीमतें हैं) को समृद्ध करते हैं, तो आप बेहतर विभाजन करने में सक्षम होंगे (हालांकि मुझे अभी तक पता नहीं है) –

उत्तर

2

यहाँ एक विचार है:

public function priceBuckets($prices) 
{  
    sort($prices); 

    $buckets = array(array()); 
    $a = 0; 

    $c = count($prices); 
    for($i = 0; $i !== $c; ++$i) { 
     if(count($buckets[$a]) === 10) { 
      ++$a; 
      $buckets[$a] = array(); 
     } 

     if(isset($buckets[$a][$prices[$i]])) { 
      ++$buckets[$a][$prices[$i]]; 
     } else if(isset($buckets[$a - 1][$prices[$i]])) { 
      ++$buckets[$a - 1][$prices[$i]]; 
     } else { 
      $buckets[$a][$prices[$i]] = 1; 
     } 
    } 

    return $buckets; 
} 

//TEST CODE 
$prices = array(); 

for($i = 0; $i !== 50; ++$i) { 
    $prices[] = rand(1, 100); 
} 
var_dump(priceBuckets($prices)); 
: मूल रूप से आप 10 से भरी बाल्टी में कीमत को सॉर्ट होगा, सरणी में कुंजी के रूप में प्रत्येक मूल्य, मूल्य कितने उत्पादों दिया कीमत बिंदु पर कर रहे हैं की गिनती है

परिणाम से, आप रीसेट और अंत का उपयोग प्रत्येक बाल्टी के न्यूनतम/अधिकतम

किंडा ब्रूट फोर्स, लेकिन उपयोगी हो सकता है ...

+0

यह मेरे जैसा है दृष्टिकोण जहां मैंने क्वार्टाइल ले लिए थे, सिवाय इसके कि आपने 4 से 4 समूहों को चुना है। मुझे लगता है कि यह सबसे आशाजनक दृष्टिकोणों में से एक है, मेरी एकमात्र समस्या यह है कि इसका परिणाम अजीब मूल्य सीमाओं में होता है, भले ही वे डेटा का एक अच्छा प्रतिनिधित्व हो। दूसरे शब्दों में, मैं कीमतों के साथ 15.47 डॉलर से 152.87 डॉलर तक पहुंच सकता हूं। प्रत्येक बाल्टी में भी वितरण हो सकता है, लेकिन मूल्य सीमाएं मनमाने ढंग से और भ्रमित होती हैं। –

0

आप अपने अंतिम परिणाम के रूप में क्या देख रहे हैं (क्या आप हमें एक उदाहरण समूह दे सकते हैं)? यदि आपका एकमात्र लक्ष्य सभी समूहों के लिए पर्याप्त महत्वपूर्ण उत्पादों की महत्वपूर्ण संख्या है, तो भी, यदि आप अपने वर्तमान डेटा सेट के लिए काम करने वाले सही एल्गोरिदम के साथ आते हैं, तो इसका मतलब यह नहीं है कि यह कल के डेटासेट के साथ काम करेगा। आपको आवश्यक समूहों के सेटों की संख्या के आधार पर मैं केवल मनमानी समूह बनाउंगा जो एल्गोरिदम का उपयोग करने की बजाय आपकी आवश्यकताओं के अनुरूप हैं। पूर्व। ($ 1 - $ 25, $ 25-100, $ 100 +)। उपभोक्ता के परिप्रेक्ष्य से मेरा दिमाग स्वाभाविक रूप से उत्पादों को 3 अंतर मूल्य श्रेणियों (सस्ते, मिड्रेंज और महंगी) में वितरित करता है।

0

मुझे लगता है कि आप बहुत ज्यादा सोच रहे हैं।

यदि आप अपने उत्पादों को जानते हैं, और आपको बढ़िया अनाज वाले परिणाम पसंद हैं, तो मैं उन मूल्य सीमाओं को बस कड़ी मेहनत करूँगा। यदि आपको लगता है कि आप जो बेच रहे हैं उसके लिए $ 1 से $ 10 समझ में आता है, तो इसे डालें, आपको एल्गोरिदम की आवश्यकता नहीं है। बस एक चेक करें ताकि आप केवल उन श्रेणियों को दिखाएं जिनके परिणाम हैं।

यदि आप अपने उत्पादों को नहीं जानते हैं, तो मैं केवल सभी उत्पादों को मूल्य से क्रमबद्ध करता हूं, और इसे बराबर संख्या के उत्पादों के 4 समूहों में विभाजित करता हूं।

3

यहाँ एक विचार है, मेरी टिप्पणी के बारे में सोचा की लाइन निम्नलिखित:

मुझे लगता है आप उनमें से प्रत्येक एक कीमत द्वारा टैग उत्पादों का एक सेट है, और एक बिक्री की मात्रा का अनुमान है (कुल से प्रतिशत के रूप में बिक्री)। सबसे पहले, सभी उत्पादों को उनकी कीमत से सॉर्ट करें। इसके बाद, विभाजन शुरू करें: आदेशित सूची को पार करें, और बिक्री की मात्रा जमा करें। प्रत्येक बार जब आप लगभग 25% तक पहुंचते हैं, तो वहां काट लें। यदि आप ऐसा 3 बार करते हैं, तो इसके परिणामस्वरूप 4 सबसेट्स अलग-अलग मूल्य सीमाएं होंगी, और इसी तरह की बिक्री की मात्रा होगी।

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