Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting - Fatal编程技术网

Algorithm 排序集合中的高效插入

Algorithm 排序集合中的高效插入,algorithm,sorting,Algorithm,Sorting,我有一个10条信息的集合,按喜欢的数量排序定期我更新该集合,用新的消息替换一些旧的消息,这些消息同时得到了更多的喜欢,因此该集合再次包含10条消息,并按喜欢的数量排序 我有api来插入或删除集合中相对于现有成员消息的消息插入(消息id、相对、上方或下方)和删除(消息id)。我想通过优化插入新消息的位置来最小化api调用的数量,这样集合总是被排序的,最后10个长。(在流程中,长度和顺序无关,仅在流程结束时) 我知道我可以计算新的集合,然后只替换与新位置不匹配的消息,但我相信它可以进一步优化,并且算

我有一个10条信息的集合,按喜欢的数量排序定期我更新该集合,用新的消息替换一些旧的消息,这些消息同时得到了更多的喜欢,因此该集合再次包含10条消息,并按喜欢的数量排序

我有api来插入或删除集合中相对于现有成员消息的消息<代码>插入(消息id、相对、上方或下方)和
删除(消息id)
。我想通过优化插入新消息的位置来最小化api调用的数量,这样集合总是被排序的,最后10个长。(在流程中,长度和顺序无关,仅在流程结束时)

我知道我可以计算新的集合,然后只替换与新位置不匹配的消息,但我相信它可以进一步优化,并且算法已经存在

编辑:

注意“定期”这个词,意思是消息不会一个接一个地出现,但我会在一段时间内收集新消息,对它们进行排序,并进行新的收集,然后通过api在网站上发布。所以我有两个集合,一个是内存中的简单数组,另一个是现场的


其思想是重用应该保留的已插入消息及其在更新的集合中的顺序,以保存http api调用。我相信我可以重用现有的算法,以最少的插入、删除操作将现有集合转换为已知的结果集合。

我认为您只需要保留一个消息列表/向量,并随时对其进行排序,并与每个新消息保持同步


由于此集合将始终进行排序,并且假设它具有随机访问权限,您可以使用二进制搜索来查找插入点,即O(log_2^M),其中M是您的最大列表大小,例如10。但是当你在这里插入的时候,它需要O(M)来移动元素。因此,当要插入(或更新)的消息没有当前消息那么喜欢时,我只需要使用一个链表并对其进行迭代。

我认为您只需要保留一个消息列表/向量,并随时对其进行排序,使其与每一条新消息保持同步


由于此集合将始终进行排序,并且假设它具有随机访问权限,您可以使用二进制搜索来查找插入点,即O(log_2^M),其中M是您的最大列表大小,例如10。但是当你在这里插入的时候,它需要O(M)来移动元素。因此,当要插入(或更新)的邮件的喜欢度低于当前邮件时,我只需使用一个链表并对其进行迭代。

首先删除所有不再在前10条喜欢的邮件中的邮件

为了从现有列表中获得最多的信息,我们现在应该查找按其喜好排序的最长消息子序列(我们可以使用此处提到的算法,使用喜好数作为值)


然后,我们将删除所有其他消息(不是子序列),并按顺序插入缺失的消息。

首先删除所有不再在前10条喜欢的消息中的消息

为了从现有列表中获得最多的信息,我们现在应该查找按其喜好排序的最长消息子序列(我们可以使用此处提到的算法,使用喜好数作为值)


然后,我们将删除所有其他消息(不是子序列),并按顺序插入丢失的消息。

您做了什么?嗨!你能在文本中插入更多的换行符,使其结构更合理一些吗?我觉得额外的结构对于让人们充分理解你的复杂问题是非常必要的。这是一个简单的问题,有着复杂的解决方案。你们都做了些什么?嗨!你能在文本中插入更多的换行符,使其结构更合理一些吗?我觉得额外的结构对于让人们充分理解你的复杂问题是非常必要的。这是一个复杂解决方案的简单问题。邮件不会一个接一个出现,我添加了编辑以澄清。邮件不会一个接一个出现,我添加了编辑以澄清。您认为我应该只搜索一个子序列吗?是的,由于最长的序列无法扩展,因此必须删除所有其他邮件。例如,请参见此列表8,1,9,2,10,最长的子序列是8,9,10(或1,9,10),显然必须删除1,2,因为它们不能用于当前位置。您认为我应该只搜索一个子序列吗?是的,因为最长的序列不能扩展,所以必须删除所有其他消息。例如,参见列表8,1,9,2,10,最长的子序列是8,9,10(或1,9,10),显然必须删除1,2,因为它们不能在当前位置使用。