计算要获取的最佳项目数的算法

时间:2015-05-06 17:25:03

标签: python algorithm

好吧,这是一个从里面吃我的问题,所以任何帮助都会受到赞赏。 我有一个返回项目列表的Web服务。返回的项目数由两个变量' page'和' per_page'。所以像

这样的网址
abc.com?page=10&per_page=100

将显示包含100个项目的第10页。我必须有效地查询此服务,并且只获取在最后一次获取后添加的项目。所以说我已经将所有项目缓存到#1024,然后又添加了12个项目,使计数达到1036。 如何计算页面和per_page值,以便在单页中获取所有添加的项目,同时保持per_page qunatity尽可能接近新添加的项目。例如:在这种情况下,per_page应该接近但不小于12.我已经知道缓存的最后计数和当前的项目总数。如果获取的页面具有先前缓存的项目,则可以。我试图找到最佳的响应而不是最准确的。我使用的语言是python,但只是一个算法或伪代码将是非常受欢迎的。

注意:该服务首先为我提供最早的物品。因此,最新的条目总是添加到最后一页

3 个答案:

答案 0 :(得分:2)

是否有令人信服的理由不过度请求?

abc.com?page=2&per_page=1024

始终设置page=2per_page =缓存的项目数。

唯一奇怪的情况是,添加元素的数量大于缓存的项目数,在这种情况下,您必须abc.com?page=1&per_page=99999

答案 1 :(得分:2)

首先要知道您需要per_page至少等于新项目的数量(假设您希望它们都在同一页面上)

 def items_per_page(total_item_count,new_item_count):
     for i in itertools.count(new_item_count):
        if total_items % i>= new_item_count:
            return i
 total_count = 136  #including the new items
 new_count = 12
 ct_per_page = items_per_page(total_count,new_count)
 page_num = total_count//ct_per_page  + 1 # the last page
 print my_url+"?page="+page_num+"&per_page="+ct_per_page

至少我非常肯定会一直给你一个最佳的结果:)

最佳我指的是per_page

的最小值

答案 2 :(得分:0)

这是带有小错误修复的代码,以提供最佳页面大小(建议的代码不会返回精确划分总计数的页面大小)。

def items_per_page(total_item_count,new_item_count):
     for i in itertools.count(new_item_count):
        if total_items % i>= new_item_count or total_items %i == 0:
            return i
 total_count = 136  #including the new items
 new_count = 12
 ct_per_page = items_per_page(total_count,new_count)
 page_num = total_count//ct_per_page  + 1 # the last page
 print my_url+"?page="+page_num+"&per_page="+ct_per_page