2009-09-02 7 views
3

나는 사용자가 임의의 그림을 평가할 수있는 "뜨겁거나 가벼운"유형의 웹 응용 프로그램에서 작업하고 있습니다. 자신의 사진을 더 자주 제출하도록 제출했습니다. 아래는 내가 찾고있는 것의 설명입니다. 사용자 임의의 사진을 보여임의의 "뜨겁거나 그렇지 않은"알고리즘/솔루션이 필요합니다.

1 필요성
대부분의 활동 2 사용자는 사진을 많이 가정
3을 보여주는이 그림의 더 큰 기회를 가질 것, 그래서 효율적인 필요 해요 솔루션

가장 효과적인 방법은 무엇입니까? 내가 가지고있는 유일한 해결책은 모든 그림과 함께 마스터 목록 테이블을 유지하는 것입니다. 누군가가 그 테이블에 레코드를 삽입 할 때 %까지 표시하고 사용자가 앱을로드하면 이미 검토/비율 그림에 대한 제외 목록과 세션의 임의 500 그림 ID.

감사

일반적으로

답변

1

, 나는이 득점 메커니즘과 함께 파이프 라인 패턴을 사용하여 구현하는 것입니다.

모든 관련 항목을 추출하여 파이프 라인을 통해 전달하십시오. 어떤 경우이든 (의사) 무작위가 될 것이기 때문에 데이터베이스에서 매번 검색 할 필요가 없을 수도 있습니다. 캐싱은 문제가되지 않습니다.

파이프 라인에서 다른 알고리즘을 기반으로 항목 점수를 할당하거나 수정할 수있는 다양한 전략을 등록 할 수 있습니다. 이러한 알고리즘 중 일부는 임의의 점수를 할당 할 수 있지만 일부는 사용자의 활동 등을 기준으로 결정 론적 점수를 지정할 수 있습니다.

결국 항목을 정렬하고 점수가 가장 높은 점수를 선택합니다.

이 디자인을 사용하면 걱정할 필요가 없습니다. 알고리즘의 일부를 수정해야하는 경우 다른 전략을 건드리지 않고도 파이프 라인에서 전략을 추가하거나 제거 할 수 있습니다.

3

당신이 쓴 것은 진정한 무작위 선택이 아니라 가중치가있는 선택입니다. 핵심은 각 그림에 가중치를 부여하는 방법을 알아내는 것이며 알고리즘에 의미있는 무작위성을 부여합니다. 귀하의 "사용자 활동"에 대한 정의는 당신에게 체중의 기초를 제공 할 것입니다.

활동을 그림의 수로 간주한다고 가정 해 보겠습니다. 그런 다음 각 사용자에 대해이 값을 계정과 관련되게 유지합니다. 따라서 매번 계산할 필요가 없습니다. 각 그림에 대해 0과 1 사이의 난수를 선택하고 그림을 업로드 한 사용자의 가중치로 곱하십시오. 결과 값으로 사진을 주문하고 해당 사용자에게 표시 할 상위 500 개의 사진을 선택하십시오. 원하는 경우 사용자가 이미 등급을 매긴 사진을 제외 할 수 있습니다. 그들은 심지어 가중치를 적용 할 필요가 없습니다.

가중치 기준을 조정하십시오. 가중치가 최소/최대 범위 내에 있는지 확인하여 모든 사용자가 사진을 선택할 최소 기회를 가지며 사용자가 선택 사항을 지배 할 수 없도록하려는 경우가 있습니다. 원하는 방식으로 배포판을 얻으려면 상수를 추가하거나 곱하면됩니다. 의심 할 여지없이 확률을 사용하여 파생시킬 수있는 방법이 있지만 이른 아침에 확률을 낼 수는 없습니다.

+0

그래서 각 사용자의 사진의 비율 목록이 있습니까? –

+0

아니요. 사용자가 로그인 할 때마다 각 사진을 선택하여 각 요청마다 다시 계산하지 않아도됩니다. 당신이 평가할 그림이 부족하다면, 새로운 세트를 생성해야합니다. – tvanfosson

0

분명히 각 사용자의 활동을 저장해야합니다. 트릭은 가중치를 기반으로 다음 그림을 선택하는 방법입니다. 사용자 활동의 전체 목록을 살펴 보거나 가중치를 적용한 다음 임의의 숫자를 목록에 매핑하지 않아도됩니다.

한 가지 방법은 각 사용자의 활동에 따라 모든 사진의 점수를 매기고 각 사진 옆에이 사진을 저장하는 것입니다. 각 페이지 뷰마다 임의로 '컷오프'점수를 생성하여 모든 사진을 필터링 한 다음 '컷오프'점수보다 높은 점수를 가진 사진 세트에서 무작위로 사진을 선택합니다.

효과적이기 위해서는 가중치 및 컷오프 점수를 조정해야하지만 과도한 목록을 저장하거나 대량의 데이터를 미리 인덱싱하지 않아도 요구 사항을 충족합니다.

관련 문제