Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要随机的“热或不热”算法/解决方案_C#_Asp.net - Fatal编程技术网

C# 需要随机的“热或不热”算法/解决方案

C# 需要随机的“热或不热”算法/解决方案,c#,asp.net,C#,Asp.net,我正在开发一种热门或非热门的web应用程序,用户可以对一些随机图片进行评分,我们希望通过让用户自己提交的图片更频繁地显示出来来鼓励用户进行评分。下面是我要找的东西的描述 1-需要向用户显示随机图片 2-活动最多的用户将有更大的机会显示图片 3-假设很多图片,所以我需要一个有效的解决方案 最有效的方法是什么?目前,我唯一的解决方案是保留一个包含所有图片的主列表表,当有人对我在该表中插入的记录进行评分时,加上它们的显示百分比,当用户加载应用程序时,我会在会话中加载一个随机的500个图片id,其中包含

我正在开发一种热门或非热门的web应用程序,用户可以对一些随机图片进行评分,我们希望通过让用户自己提交的图片更频繁地显示出来来鼓励用户进行评分。下面是我要找的东西的描述

1-需要向用户显示随机图片 2-活动最多的用户将有更大的机会显示图片 3-假设很多图片,所以我需要一个有效的解决方案

最有效的方法是什么?目前,我唯一的解决方案是保留一个包含所有图片的主列表表,当有人对我在该表中插入的记录进行评分时,加上它们的显示百分比,当用户加载应用程序时,我会在会话中加载一个随机的500个图片id,其中包含一个排除列表,用于查看/评分图片


多亏了

总的来说,我会使用管道模式和评分机制来实现这一点

首先提取所有相关项并通过管道传递它们。您可能不需要每次都从数据库中检索它们——因为在任何情况下都是伪随机的,所以缓存不会成为问题

在您的管道中,您可以注册许多不同的策略,这些策略可以根据不同的算法分配或修改项目的分数。其中一些算法可能会分配随机分数,而一些算法可能会根据用户的活动分配确定性分数,等等

最后,对项目进行排序,并选择得分最高的项目


这种设计可以很好地分离关注点:如果您需要修改算法的某些部分,您可以在不接触任何其他策略的情况下从管道中添加或删除策略。

您所追求的不是真正的随机选择,而是加权选择。关键是要弄清楚如何对每张图片进行加权,并在算法中保留一些有意义的随机性。您对用户活动的定义将为您提供权重的基础

假设你认为活动是所显示图片的数量。然后,对于每个用户,将此值与他们的帐户关联,这样您就不必每次都计算它。对于每张图片,选择一个介于0和1之间的随机数,然后乘以上传图片的用户的权重。按结果值排序图片,然后选择要显示给该用户的前500张图片。显然,如果您愿意,您可以排除用户已经评级的图片。它们甚至不需要加权


调整您的权重标准-也许您希望确保权重在某个最小/最大范围内,以便所有用户都有一些选择其图片的最小机会,并且没有用户可以控制选择。您可能需要对其进行修补—可能需要将其与常数相加或相乘—以获得所需的分布。毫无疑问,有一种方法可以使用概率来推导它,但我不能在早上这么早就计算概率。

显然,您需要存储每个用户的活动。诀窍在于如何根据权重选择下一张图片,而无需查看整个用户活动列表,应用权重,然后将随机数映射到列表

一种方法是根据各自用户的活动对所有照片进行评分/加权,并将其与每张照片一起存储。对于每个页面视图,您将通过随机生成“截止”分数筛选所有照片,然后从分数高于“截止”分数的照片集中随机选择一张照片


你需要调整权重和截止分数,这样才能有效,但它满足您的要求,无需存储过多的列表或预先索引大量数据。

因此,是否有一个图片列表为每个用户评分?否。每次用户登录时,请选择一组图片进行评分,这样您就不必在每次请求时重新计算。如果没有图片可供评分,则必须生成一组新图片。