2010-01-22 44 views
6

Tôi đang cố gắng tìm cách tính toán thứ hạng. Hiện tại, nó chỉ đơn giản là lấy tỷ lệ thắng/thua của mỗi mục nhập riêng lẻ, vì vậy ví dụ: một người đã thắng 99 lần trong tổng số 100, nó có 99% hạng chiến thắng. NHƯNG nếu một mục giành được 1 trong tổng số 1 phiếu bầu, nó sẽ có một thứ hạng chiến thắng 100%, nhưng chắc chắn nó không thể cao hơn hạng mục giành được 99 lần. Điều gì sẽ là một cách tốt hơn để làm điều này?Thuật toán biểu quyết: cách tính xếp hạng?

+0

PS điều duy nhất tôi có thể nghĩ là xếp hạng đúng dựa trên "sự trưởng thành" của một mục (tổng số lần trong cuộc thi). Mặt khác, cách tiếp cận này sẽ cấm tất cả các mục mới chỉ nhận xếp hạng cao nhất bởi vì họ không phải là mới vì họ không nhận được phiếu bầu hàng đầu (cho đến khi họ "trưởng thành" và xếp hạng không được điều chỉnh nữa) –

Trả lời

5

Tùy thuộc vào cách phức tạp bạn muốn làm cho nó, việc sử dụng hệ thống Elo cờ vua (hoặc một cái gì đó tương tự) có thể là những gì bạn muốn: http://en.wikipedia.org/wiki/Elo_rating_system

Thậm chí nếu một người đã giành được 1/1 trận đấu, đánh giá của anh sẽ là thấp hơn nhiều so với những người đã thắng/thua hàng trăm trận đấu chống lại các đối thủ khó khăn, ví dụ.

+0

Cảm ơn, tài nguyên tuyệt vời. –

0

nếu tôi hiểu câu hỏi chính xác, thì bất kỳ ai nhận được nhiều phiếu bầu hơn đều có thứ hạng cao hơn.

+0

Không, xem nhận xét của tôi dball917 ở trên –

+0

bạn cũng có thể sử dụng một cái gì đó như thế này để có được điểm số: score = (win/(win + lost)) * 100 – infinitloop

1

Bạn luôn có thể sử dụng hệ thống điểm thay vì tỷ lệ thắng/thua. Chiến thắng sẽ luôn luôn cho điểm và sau đó bạn có thể chơi xung quanh với một trong hai loại bỏ điểm cho mất, không trao điểm cho tất cả để mất, hoặc giải thưởng ít điểm hơn cho mất. Tất cả phụ thuộc vào chính xác cách bạn muốn mọi người được xếp hạng. Ví dụ: bạn có thể muốn dành 2 điểm để thắng và 1 điểm để thua nếu bạn muốn ưu tiên những người tham gia vào những người không tham gia (ví dụ như những gì bạn đang nói về ví dụ của bạn về người chơi 100 trận đấu 1 trò chơi). NHL sử dụng một kỹ thuật tương tự cho bảng xếp hạng (2 điểm cho một chiến thắng, 1 điểm cho một sự mất mát ngoài giờ, 0 điểm cho một mất mát thường xuyên). Điều đó có thể giúp bạn linh hoạt hơn.

+1

Cách này mục mới tốt hơn sẽ KHÔNG BAO GIỜ có thể bắt kịp với những người lớn tuổi nếu chúng ta sử dụng điểm. Họ sẽ luôn có độ trễ ngay cả khi tỷ lệ thắng/thua của họ cao hơn. –

+0

Vâng, như tôi đã nói nó phụ thuộc vào những gì bạn muốn làm. Bài đăng dường như cho thấy anh muốn ủng hộ mọi người với nhiều trò chơi hơn. – dball917

0

Sẽ có ý nghĩa khi thêm xếp hạng khác vào mục giành chiến thắng nếu mất mục nhập ban đầu có xếp hạng cao hơn nhiều, ví dụ: đối thủ cạnh tranh mạnh hơn nhiều?

6

Hãy thử một cái gì đó như thế này:

votes = wins + losses 
score = votes * (wins/votes) 

Bằng cách đó, một cái gì đó với 50% chiến thắng, nhưng một triệu phiếu bầu vẫn sẽ là trước một cái gì đó với 100% chiến thắng nhưng chỉ có một phiếu biểu quyết.

Bạn có thể thêm vào một trọng lượng thêm dựa trên tuổi (trong những ngày trong ví dụ này), quá, cái gì đó như

if age < 5: 
    score = score + ((highest real score on site) * ((5 - age)/5) 

này sẽ đưa thương hiệu mục mới ngay ở phía trên cùng của trang đầu tiên, và sau đó chúng sẽ di chuyển chậm trong danh sách trong 5 ngày tiếp theo (tôi giả định tuổi là một số phân số, không chỉ là một số nguyên). Sau 5 ngày, chúng sẽ được đưa vào danh sách dựa trên điểm số từ bit trước của mã giả.

+1

Tôi nghĩ bạn có điểm số = phiếu * (thắng/thua) – assaqqaf

Các vấn đề liên quan