2012-04-15 75 views
2

假设我们正在为客户生成优惠券 - 每张优惠券都有一个ID和到期日期,我们要设计一个程序以允许客户要求其优惠券。特别是,我们不打算使用任何支持数据库,但需要具有处理数百万优惠券的可扩展性 - 关键逻辑应该防止优惠券获得两次索赔与优惠券声明逻辑相关的数据结构

主要我想了解最佳数据结构来维护coupoun的状态,即它是否已经声明 - 我知道有像位图,hashmap,b-tree等选项 - 我想了解哪个是最优化的

+0

以及您的实际编程问题是什么? – 2012-04-15 04:38:02

+0

问题是创建子程序,它以参数优惠券ID作为参数并返回它是否已被声明或者是否已过期 – user882659 2012-04-15 04:43:54

+0

这不是问题;这是一个乞讨的工作描述。写你自己的代码! – 2012-04-15 04:44:32

回答

0

我在想这样的事情 - 生成一个类似于(发行日期+到期日期+运行计数器(每个问题/到期日期对单独的系列1 ... N)+校验和)的优惠券ID,然后得到类似于HashMap(ExpiryDate => HashMap(IssueDate,BTree))... Btree将存储与声称的优惠券相对应的声明计数器

在我的方法中,我们所做的是我们生成优惠券ID ,以便在优惠券ID内,我编码优惠券发行日期和优惠券到期日以及递增计数器值 - 1,2 .... N,优惠券20120401-20120410-12345-XYZ,那么我只维护已经为BTree中的每个发行日期/到期日期配对声明的计数器...此Btree而不是每个声称的计数器有1个数字将存储一系列计数器值声称。每个发行/到期日对将会有1个Btree。

但是这个Btree将每个节点都作为(N1,N2),其中所有数字在N1 < = N2之间已经声明,如果它与任何现有节点不连续,我们向btree插入一个新节点,否则将它合并到现有节点是否连续并更新N1或N2

1

不可能做这样的事情没有有一个存储机制。 您需要验证优惠券代码的算法。使用完毕后,您需要在数据库中为该优惠券代码设置一个标志,这样任何人都不能使用相同的优惠券两次。

所以表结构是这样的:

表COUPONS

COUPONCODE:为nvarchar(80)
ISUSED:位
EXPIRYDATE:日期时间

+0

我想使用内存数据结构 – user882659 2012-04-15 05:04:01

+0

@ user882659:为什么。 – 2012-04-15 05:25:20

+0

使用数据库将是两个缓慢的 - 我将编码到期日期与优惠券编号 – user882659 2012-04-15 05:26:19

0

可以维持两个文件?在第一个文件中,为每一天即将到期的所有优惠券ID创建倒排索引。 所以你会有这样的{mm/dd/yyyy:[将在这个mm/dd/yyyy上过期的产品] ...}(所以这就像键/值对那里的值是一个列表。) 第二个是字典,你可以使用coupon_id作为键和布尔值来表示你是否销售优惠券的散列表。

然后你根据第一个地图的触发响应每天更新第二个散列表。 因此,像这样..

hashmap 1 :{ Today_date:[1234,2345,42234]....tomorrows date:[43225,2508502..]} 

因此,这表明该优惠券打算今天和明天到期..等等

hashamp 2:{ 1234:1, 2345:0....} 

1可能意味着,优惠券已经售出..

但今天日通过后.. 您退回产品[1234,2345,42234 ...]因为这些设置优惠券到期..在hashmap2中:设置值为“0”的优惠券的值为-1或其他...意味着它们不再可用。 所以在hashmap 2中,只有具有0值的优惠券ID是可用??

+0

嗯..我想这样的事情 - 生成一个类似的优惠券ID(发行日期+到期日期+运行计数器(单独对于每个发行/到期日期对的系列1 ... N)+校验和)然后具有诸如HashMap(ExpiryDate => HashMap(IssueDate,BTree))之类的东西...... Btree将被存储在与具有被称为 – user882659 2012-04-15 05:45:14

+0

,但是这个Btree将每个节点作为(N1,N2),其中N1 <= N2之间的所有数字都被声明,我们向btree插入一个新节点,如果它不与任何现有节点连续,否则将它合并到现有节点(如果它是连续的并更新N1或N2) – user882659 2012-04-15 05:45:30

+0

对不起,我无法理解您的方法。我想,它会工作..但纠正我,如果我错了..但如果你通过你的散列图中的Btree,并且你为所有的优惠券id做这个..不会是非常昂贵?? 反向索引是在搜索引擎中使用的,其中的单词是关键字,值是发现该单词的文档列表...所以如果像这样的事情适用于搜索引擎巨头,那么它应该与你一起工作以及..但再次有很多方法来做到这一点..选择一个你认为容易为你假设性能是相同的替代 – Fraz 2012-04-15 05:58:21