سؤال

بالنسبة لمجلس الطلاب هذا العام ، أنا في لجنة "الأغاني" ، نختار الأغاني. لسوء الحظ ، فإن الأطفال في الرقصات ينتهي بهم الأمر دائمًا إلى كره بعض خيارات الأغاني الغبية. اعتقدت أنني يمكن أن أجعل الأمر مختلفًا هذا العام. في يوم الخميس الماضي ، قمت بإنشاء تطبيق PHP بسيط حتى يتمكن الأطفال من إرسال الأغاني إلى قاعدة البيانات ، وتزويد اسم الأغنية والفنان والنوع (من المنسدلة). لقد قمت أيضًا بتنفيذ ميزة تصويت مماثلة لـ Reddit's. انقر فوق زر التصويت ، لقد قمت بإعداد الأغنية ، وزيادة عدد التصويت. نفس الشيء مع downvotes.

على أي حال ، في قاعدة البيانات ، لديّ ثلاثة حكايات من المعلومات التي اعتقدت أنه يمكنني استخدامها لتقييم هذه الأغاني ، والأعلى ، والهبوط ، والجدول الزمني. لفترة من الوقت ، تم إنشاء الرتبة ببساطة عن طريق وجود الأغاني مع عدد "التصويت" الأعلى في القمة. أي أنه كلما زاد عدد الأدوات الصوتية ، سيكون أقل من ذلك (Upvotes - Downvotes) في أعلى القائمة. لقد نجح ذلك لفترة من الوقت ، ولكن كان هناك حوالي 75 أغنية في القائمة بحلول يوم الأحد ، وكانت الأغاني التي تم تقديمها أولاً في الجزء العلوي من القائمة.

الأحد ، قمت بتغيير خوارزمية الترتيب إلى (Upvotes - Downvotes) / (CurrentTimestamp - CreateTimestamp) ، أي كلما ارتفع عدد الأصوات في مقدار الوقت الأقل ، كلما زادت الأغنية في القائمة. هذا يعمل ، أفضل ، ولكن لا يزال لا يعجبني.

ما يحدث الآن ، هو أنه يتم إنشاء الأغنية الفورية وتثبيتها إلى عدد الأصوات 1 ، وينتهي بها الأمر في الجزء العلوي من القائمة في مكان ما. لا يتم عرض الأغاني التي لديها عدد من الأصوات في السلبيات في كثير من الأحيان لأن الأطفال لا ينقلون عادة إلى القاع.

أعتقد أنه يمكنني فرز البيانات حتى تظهر الأغاني السفلية في الأعلى ، لذلك يضطر الناس إلى رؤية الأغاني السفلية. بصراحة ، لم أضطر أبدًا إلى العمل على خوارزمية "شعبية" من قبل ، فما هي أفكارك؟

موقع الويب في http://www.songs.taphappysoftware.com - لا أعرف ما إذا كان ينبغي عليّ وضع هذا هنا أم لا ، قد يتسبب في بعض الأغاني غير المرغوب فيها في الرقص: 0

هل كانت مفيدة؟

المحلول

هذا سؤال جيد جدا. هناك بعض الأسئلة المماثلة التي تم طرحها هنا.

هذه المقالة ربما يكون مكانًا جيدًا للبدء. من الواضح أن الصعود ناقص المنحدر هو وسيلة سيئة للقيام بذلك. أفضل طريقة للاستخدام الرياضيات المعقدة لتعيين درجة لكل وفرز بذلك.

فيما يلي وظيفة تسجيل في روبي من المقالة:

require 'statistics2'

def ci_lower_bound(pos, n, power)
    if n == 0
        return 0
    end
    z = Statistics2.pnormaldist(1-power/2)
    phat = 1.0*pos/n
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end

pos هو عدد التقييم الإيجابي ، n هو إجمالي عدد التقييمات ، و power يشير إلى القوة الإحصائية: اختر 0.10 للحصول على فرصة بنسبة 95 ٪ أن يكون الحد الأدنى الخاص بك صحيحًا ، 0.05 للحصول على فرصة بنسبة 97.5 ٪ ، إلخ.

كشيء من قابلية الاستخدام ، أود فرز البيانات بالنتيجة ، لكنني لن أعرض النتيجة للمستخدم. أود فقط إظهار عدد الصغار والهبوط.

نصائح أخرى

ماذا عن فرز الأغاني عن طريق نشر الوقت أو عدد الأصوات (سلبية + إيجابية)؟ إذا كان هدفك هو إعطاء كل أغنية اهتمامًا متساويًا ، فإن هذا يبدو جيدًا بما فيه الكفاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top