2010-04-26 15 views
6

Tôi đang xây dựng một ứng dụng web chia sẻ hình ảnh nâng cao. Như bạn có thể mong đợi, người dùng có thể tải lên hình ảnh và những người khác có thể nhận xét về nó, bỏ phiếu cho nó và yêu thích nó. Những sự kiện này sẽ xác định mức độ phổ biến của hình ảnh mà tôi chụp trong trường "nghiệp".Trang chủ xoay giống như Digg của nội dung phổ biến, cách bao gồm ngày làm yếu tố?

Bây giờ tôi muốn tạo một hệ thống trang chủ giống Digg, hiển thị các hình ảnh phổ biến nhất. Thật dễ dàng, vì tôi đã có số điểm Karma có trọng số. Tôi chỉ sắp xếp theo thứ tự giảm dần để hiển thị 20 hình ảnh có giá trị nhất.

Phần bị thiếu là thời gian. Tôi không muốn hình ảnh cực kỳ phổ biến luôn ở trên trang chủ. Tôi đoán một giải pháp dễ dàng là hạn chế kết quả được đặt trong 24 giờ qua. Tuy nhiên, tôi cũng nghĩ rằng để giữ cho sự luân chuyển hình ảnh xảy ra trong suốt cả ngày, thời gian có thể là một loại biến số mà bù đắp của nó có ảnh hưởng đến việc phân loại hình ảnh.

câu hỏi cụ thể:

  • Bạn có khuyên kịch bản dễ dàng (chỉ cần sắp xếp cho hình ảnh tốt nhất trong vòng 24 giờ) hoặc một phức tạp hơn (sử dụng datetime bù đắp như một phần của việc phân loại)? Nếu bạn tư vấn cho sau này, bất kỳ trợ giúp về giải pháp toán học này? Có thể là tốt nhất để chạy dịch vụ được lập lịch để đánh dấu hình ảnh cho trang chủ hoặc bạn sẽ tư vấn cho truy vấn trực tiếp (tôi đang sử dụng MySQL)
  • Lưu ý thêm, trang chủ nên hỗ trợ phân trang và yên tĩnh ngày nên bao gồm các mục của ngày trước để chắc chắn rằng nó luôn luôn là "đầy"

tôi không yêu cầu cộng đồng để xây dựng thuật toán này, chỉ cần tìm kiếm một số lời khuyên :)

+0

Có công thức Bernoulli này để sắp xếp những thứ bạn có thể sửa đổi để mất thời gian làm tham số. Ngay bây giờ tôi không nhớ tên, có lẽ ai đó sẽ. (Đó là một cái tên dài) – Ben

Trả lời

2

Tôi sẽ thực hiện một chức năng làm giảm "hiệu quả nghiệp" của từng mục sau một khoảng thời gian nhất định trôi qua. Đây là một chút giống như phương pháp của Eric.

Xác định tần suất bạn muốn "hiệu quả nghiệp" bị giảm. Sau đó nhân nghiệp với một yếu tố nhân rộng dựa trên thời kỳ này.

effective karma = karma * (1 - percentage_decrease) 

trong đó percentage_decrease được xác định bởi chức năng của bạn. Ví dụ: bạn có thể làm

percentage_decrease = min(1, number_of_hours_since_posting/24) 

để làm cho doanh nghiệp trở nên hiệu quả của mỗi mục giảm xuống còn 0 trong 24 giờ. Sau đó sử dụng nghiệp lực hiệu quả để xác định hình ảnh sẽ hiển thị. Đây là giải pháp ổn định hơn một chút so với việc trừ đi thời gian kể từ khi đăng bài, vì nó quy mô nghiệp giữa 0 và giá trị thực của nó. Min là để giữ tỷ lệ ở giới hạn dưới 0, như một lần một ngày trôi qua, bạn sẽ bắt đầu nhận được các giá trị lớn hơn 1.

Tuy nhiên, điều này không tính đến mức độ phổ biến của tài khoản theo nghĩa hẹp. Câu trả lời của Tim đưa ra một số ý tưởng về cách xem xét mức độ phổ biến nghiêm ngặt (nghĩa là số lượt xem trang).

0

Bạn có thể chỉ tính toán trường loại "điều chỉnh nghiệp" sẽ mất thời gian vào tài khoản:

Sau đó, bạn có thể tính và sắp xếp trực tiếp trong truy vấn của mình hoặc bạn có thể biến trường này thành một trường thực trong cơ sở dữ liệu mà bạn cập nhật qua quy trình hàng đêm hoặc thứ gì đó. Cá nhân tôi sẽ đi với một quá trình hàng đêm cập nhật nó vì điều đó có lẽ sẽ làm cho nó dễ dàng hơn để làm cho thuật toán phức tạp hơn một chút trong tương lai.

1

Đối với câu hỏi đầu tiên của bạn, tôi sẽ sử dụng phương pháp phức tạp hơn một chút. Bạn sẽ muốn một số "Tất cả các yêu thích thời gian" trong hỗn hợp. Nhưng không đi theo thời gian một mình, đi theo số lượng thực tế lượt xem hình ảnh có. Hãy nhớ rằng không phải ai cũng sẽ đăng nhập và bỏ phiếu, nhưng điều đó không làm cho hình ảnh trở nên kém phổ biến hơn. Một hình ảnh mà là hai tuổi với 10 phiếu và 100k lượt xem rõ ràng là quan trọng hơn đối với mọi người hơn một hình ảnh đó là 1 tuổi với 100 phiếu bầu và 1k lượt xem.

Đối với câu hỏi thứ hai của bạn, có, bạn muốn có một số loại bộ nhớ đệm đang diễn ra ở trang chủ của bạn. Đó là rất nhiều truy vấn để tạo điểm truy cập vào trang web của bạn. Tuy nhiên, giống như SO, loại trang web của bạn sẽ có xu hướng thu hút lưu lượng truy cập đến các trang bên trong thông qua công cụ tìm kiếm .. vì vậy hãy thử và xem/tối ưu hóa truy vấn của bạn ở mọi nơi.

Đối với câu hỏi thứ ba của bạn, đi theo các yếu tố khác với thời gian (nghĩa là # lượt xem) giúp đảm bảo bạn luôn có trang đầy đủ và năng động. Tôi không chắc chắn về việc phân trang trên trang đầu, dẫn mọi người đến các thẻ hoặc tìm kiếm có thể là một chiến lược tốt hơn.

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