2013-03-11 7 views
6

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

  • किसी दिए गए खिलाड़ी
  • के लिए सर्वश्रेष्ठ स्कोर को पुनः प्राप्त एक दिया खिलाड़ी
  • के लिए पद पुन: प्राप्त करें ऊपर और नीचे मौजूदा खिलाड़ी रैंक
  • समर्थन स्कोर के साथ खिलाड़ियों को पुन: प्राप्त करने के लिए

    • जोड़ें स्कोर अलग-अलग समय सीमा: आज का स्कोर, इस सप्ताह, इस वर्ष, आदि
    • ~ 100,000 खिलाड़ियों के लिए स्केल
    • स्मृति पदचिह्न जितना छोटा हो ई (यानी सस्ते मशीन पर चलता है)

    सहायता के लिए धन्यवाद!

  • +0

    क्या आपके पास अधिकतम स्कोर/खिलाड़ी हैं? यदि नहीं, तो आपके पास 100K खिलाड़ियों के पास बहुत सारे स्कोर हो सकते हैं ... क्या पूरी चीज़ को एक बार में स्मृति में होना चाहिए, या यह ज्यादातर डिस्क (फ़्लैश, जो भी हो) पर हो सकता है? स्कोर कैसा दिखता है (0-255? 0-65525? स्ट्रिंग्स?)। जब आप "सस्ता मशीन" कहते हैं तो आपका मतलब एक पुराना पीसी है, ठीक है, फ़ोन या आर्डिनो नहीं। – angelatlarge

    उत्तर

    0

    कुल स्कोर के आधार पर खिलाड़ी की जानकारी संग्रहीत करने के लिए आप द्विआधारी खोज पेड़ (एवीएल या लाल-काले जैसे संतुलित) का उपयोग कर सकते हैं। प्लेयर संरचना के भीतर, आप अलग-अलग समय-फ्रेम के लिए अलग-अलग सरणी प्राप्त कर सकते हैं, कुल स्कोर और सर्वोत्तम स्कोर के लिए अलग-अलग चर के साथ। एक निश्चित खिलाड़ी के नीचे या ऊपर रैंक या खिलाड़ियों को ढूंढने के लिए क्रम में ट्रैवलल की आवश्यकता होगी।

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