2009-07-17 39 views
5

Tôi cần sắp xếp một số sản phẩm dựa trên xếp hạng của người dùng.Thuật toán xếp hạng

Giả sử chúng ta có 3 sản phẩm {một, b, c} và chúng tôi có lưng thức ăn của người dùng về các sản phẩm này. Điều quan trọng không phải người dùng cung cấp cho chúng tôi nguồn cấp dữ liệu (câu hỏi này không phải là về lọc tương quan nếu bạn quen thuộc với nó - quyền lợi của người dùng không phải là trường hợp ở đây)

Mỗi dòng dưới đây là nguồn cấp dữ liệu từ người dùng khi họ cố gắng để so sánh các sản phẩm 3:

150 điểm-b 0 điểm (thành viên này chỉ nói với chúng tôi những gì ông nghĩ về 2 sản phẩm a, b và trong so sánh a và b anh dù rằng nếu ông đưa ra một 150 điểm thì b trị giá 0 điểm)

150 điểm-c 20 điểm

c 200 điểm-10 điểm (mặc dù trước đó thành viên này nghĩ rằng c là tốt hơn mà một)

200 điểm-b 40 chỉ-c 100 điểm

150 điểm-b 50 điểm

150 điểm-b 20 điểm

(.Những đánh giá này chỉ là một mẫu và trong số một thế giới thực sự của sản phẩm và xếp hạng là lớn hơn nhiều so với điều này)

Bây giờ Tôi cần một thuật toán để tìm thứ hạng của sản phẩm dựa trên số phiếu của người dùng. Theo quan điểm của tôi, cách tốt nhất là mô tả vấn đề này với một đồ thị tương quan và kết nối tất cả các sản phẩm với nhau.

Bất kỳ loại trợ giúp hoặc mẹo nào được đánh giá cao.

/******************************************** ************************************/

bạn không thể chỉ thêm điểm và tính toán giá trị trung bình của các điểm sản phẩm của Nguyên nhân đó là tầm quan trọng của nó đã điểm của mình cho rằng một đã có 800 điểm so với b - sau đó c nhận được 10 điểm so với một như thế này:

200 - b 0

200 - b 0

200 - b 0

200 - b 0

c 10 - 0 (điều này có nghĩa là c là tốt hơn so với a)

vì vậy chắc chắn a tốt hơn b nhưng với 10 điểm nhỏ c có xếp hạng tốt hơn từ a

/******************************************** ************************************/

Trả lời

5

Bạn có một số thách thức. Thêm xếp hạng c 0 - b 20 và bạn có một vòng kết nối, trong đó c < b < a < c.

Và dĩ nhiên đặt hàng của bạn không chỉ không transitif (từ một < b < c không theo một < c), nó cũng không phải là tổng số (có thể có yếu tố mà bạn không thể quyết định là tốt hơn bởi vì không có người dùng bầu cử đã được thực hiện, thậm chí thông qua các yếu tố khác.

những gì bạn nhận được là một disconnected, directed, finite graph. (sử dụng sự chỉ đạo của các cạnh để nói mà phần tử (nút là tốt hơn).

Bắt đầu từ một nút nào đó bạn có thể tìm thấy các nút tốt hơn diễu hành qua biểu đồ, có thể tìm thấy nhiều giải pháp không thể so sánh. nút khởi động lại, ngừng xử lý đường dẫn đó.

Có thể lý thuyết đơn đặt hàng trong toán học có thể giúp bạn: tìm kiếm order theory, thứ tự một phần, Hasse diagram.

Để thực hiện điều này thực tế hơn:

Sử dụng mảng hai chiều có hàng và cột cho mỗi phần tử. Trong ô (a, b) tính tổng của các xếp hạng. Bắt đầu từ một phần tử nhất định a, theo tất cả các kết nối positiv (> 0), cho đến khi bạn đạt đến một nút không có kết nối positiv hoặc quay lại nút mà bạn đã truy cập. Các nút này là giải pháp của bạn.

3

A baysean rating system có thể là đặt cược tốt nhất của bạn - nó tính đến số phiếu bầu và số phiếu bầu tương đối mà một vật phẩm có để cho nó một điểm số trọng số.

+1

Các baysean hệ thống xếp hạng hoạt động khi các yếu tố được xếp hạng, nhưng không phải khi chúng được xếp hạng liên quan đến các yếu tố khác. –

1

Tôi nghĩ rằng bạn cần phải liên hệ như thế nào mỗi người bình chọn trên mỗi sản phẩm - ví dụ: người 1 bình chọn: 100 cho một, 50 cho b và 0 cho c người 2 bình chọn 0 cho một, 200 cho b và 80 cho c

này nên được dịch ra tiếng:
người 1 bình chọn 3 cho một, 2 cho b và -1 cho c
người 2 bình chọn -1 cho một, 3 cho b và 2 cho c

nơi tôi đang sử dụng:
3 để có phiếu bầu cao nhất
2 cho cao thứ hai
1 cho thấp nhất
VÀ -1 nếu họ bình chọn 0 (dấu hiệu cho thấy họ không thích/did-không-xem xét sản phẩm)

suy nghĩ ban đầu của tôi về nó anyway

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