Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Algorithm &引用;最不常用算法_Algorithm_Artificial Intelligence - Fatal编程技术网

Algorithm &引用;最不常用算法

Algorithm &引用;最不常用算法,algorithm,artificial-intelligence,Algorithm,Artificial Intelligence,我正在构建一个应用程序,该应用程序应该为用户从有限的任务池中提取任务。问题是我想要: 用户不会两次执行相同的任务 直到一段时间过去,用户才会获得与他的朋友(在应用程序中)相同的任务 为了总结我的问题,我需要从池中提取最不常见的任务 有人能给我介绍一下寻找最不常见事物(LFU)的已知算法吗。 我还需要理论方面的知识,因此,如果有人知道一些关于这方面的文章或研究论文(来自《科学美国人》等知名杂志),那就太好了。要获得使用频率最低的任务,只需给每个任务一个计数器,计算它使用了多少次。然后搜索具有最低计

我正在构建一个应用程序,该应用程序应该为用户从有限的任务池中提取任务。问题是我想要:

  • 用户不会两次执行相同的任务
  • 直到一段时间过去,用户才会获得与他的朋友(在应用程序中)相同的任务
  • 为了总结我的问题,我需要从池中提取最不常见的任务

    有人能给我介绍一下寻找最不常见事物(LFU)的已知算法吗。
    我还需要理论方面的知识,因此,如果有人知道一些关于这方面的文章或研究论文(来自《科学美国人》等知名杂志),那就太好了。

    要获得使用频率最低的任务,只需给每个任务一个计数器,计算它使用了多少次。然后搜索具有最低计数器值的任务


    为了获得好友组使用频率最低的任务,您可以为每个用户存储他/她完成的任务(以及次数)。无论如何,这些信息可能是有用的。然后,当需要为用户选择新任务时,用户及其所有朋友可以轻松创建并按频率排序已使用任务及其频率的(临时)组合列表。这并不昂贵。

    要获得使用频率最低的任务,只需给每个任务一个计数器,计算它使用了多少次。然后搜索具有最低计数器值的任务


    为了获得好友组使用频率最低的任务,您可以为每个用户存储他/她完成的任务(以及次数)。无论如何,这些信息可能是有用的。然后,当需要为用户选择新任务时,用户及其所有朋友可以轻松创建并按频率排序已使用任务及其频率的(临时)组合列表。这不是很昂贵。

    一个好的开始是Edmond Blossom V算法,用于在一般图中实现完美的最小匹配。如果你有一个二部图,你可以寻找Floyd Warshall算法来寻找最短路径。也许你也可以使用拓扑搜索,但我不知道,因为这些算法真的很难学习。

    一个好的开始是Edmond Blossom V算法,用于在一般图中实现完美最小匹配。如果你有一个二部图,你可以寻找Floyd Warshall算法来寻找最短路径。也许你也可以使用拓扑搜索,但我不知道,因为这些算法真的很难学习。

    根据你的两个要求,我不知道“最少”使用的任务与此有什么关系。你说过你想要不重复的任务

    选项1:
    你用什么容器来装所有的任务?假设它是一个列表,当你或你的朋友选择一个任务时,将该任务移动到列表的末尾(与那里的任务交换)。现在您已经将初始列表拆分为2个子列表。第一部分保存未使用的任务,第二部分保存已使用的任务。跟踪分隔两个列表的轴心/索引。
    现在,每次你或你的朋友选择一个新任务,它都是从第一个子列表中选择的。然后将其移动到第二个子列表中并更新枢轴

    选项2: 如果您最终重复任务,但首先选择时间最短的任务,那么您可以使容器成为最小堆。为每个任务添加一个使用计数器,并基于此将它们添加到堆中。提取一个任务并增加其使用计数器,然后将其放回堆中。这是一个很好的解决方案,但根据程序的简单程度,您甚至可以使用循环缓冲区


    如果您能更多地了解您正在构建的内容,那就太好了:)

    根据您的两项要求,我看不出“最少”使用的任务与此有什么关系。你说过你想要不重复的任务

    选项1:
    你用什么容器来装所有的任务?假设它是一个列表,当你或你的朋友选择一个任务时,将该任务移动到列表的末尾(与那里的任务交换)。现在您已经将初始列表拆分为2个子列表。第一部分保存未使用的任务,第二部分保存已使用的任务。跟踪分隔两个列表的轴心/索引。
    现在,每次你或你的朋友选择一个新任务,它都是从第一个子列表中选择的。然后将其移动到第二个子列表中并更新枢轴

    选项2: 如果您最终重复任务,但首先选择时间最短的任务,那么您可以使容器成为最小堆。为每个任务添加一个使用计数器,并基于此将它们添加到堆中。提取一个任务并增加其使用计数器,然后将其放回堆中。这是一个很好的解决方案,但根据程序的简单程度,您甚至可以使用循环缓冲区


    如果你能更多地了解你正在建造的建筑,那就太好了:)

    我想你需要的结构是一个。它允许提取O(Log(n))中的最小值,也允许您增加O(Log(n))中某个项目的值。

    我认为您需要的结构是一个。它允许提取O(Log(n))中的最小值,还允许您增加O(Log(n))中某个项目的值。

    它对我不起作用,因为每个用户都有自己的朋友列表,因此如果用户A的一些朋友正在执行任务X,这并不意味着用户B不能执行此任务(因为他的朋友没有接触任务X)。所以,全局计数器不起作用。每个用户都可能有私人计数器,但这太贵了。它对我不起作用,因为每个用户都有自己的朋友列表,所以如果用户a的一些朋友在执行任务X,这并不意味着用户B不能执行此任务(因为他的朋友没有接触任务X)。那么,格洛