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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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_Data Structures - Fatal编程技术网

Algorithm 与优惠券索赔逻辑相关的数据结构

Algorithm 与优惠券索赔逻辑相关的数据结构,algorithm,data-structures,Algorithm,Data Structures,假设我们正在为客户生成优惠券——每个优惠券都有一个id和到期日,我们希望设计一个程序,允许客户申领优惠券。特别是,我们不打算使用任何支持数据库,但需要具有可扩展性来处理数百万张优惠券-关键逻辑应防止优惠券被两次申请 首先,我试图了解维护coupoun状态的最佳数据结构,即它是否已被声明-我知道有位图、hashmap、b-tree等选项-我想了解哪种数据结构最为优化如果没有存储机制,就不可能做到这一点。 您需要一个验证优惠券代码的算法。使用后,您需要在数据库中为该优惠券代码设置一个标志,以便任何人

假设我们正在为客户生成优惠券——每个优惠券都有一个id和到期日,我们希望设计一个程序,允许客户申领优惠券。特别是,我们不打算使用任何支持数据库,但需要具有可扩展性来处理数百万张优惠券-关键逻辑应防止优惠券被两次申请


首先,我试图了解维护coupoun状态的最佳数据结构,即它是否已被声明-我知道有位图、hashmap、b-tree等选项-我想了解哪种数据结构最为优化

如果没有存储机制,就不可能做到这一点。 您需要一个验证优惠券代码的算法。使用后,您需要在数据库中为该优惠券代码设置一个标志,以便任何人都不能使用同一优惠券两次

因此,表结构将类似于:

餐桌券

耦合码:nvarchar(80)
已使用:位

expireydate:datetime

您能维护两个文件吗?在第一个文件中,创建一个反向索引,其中包含每天将过期的所有优惠券ID。 因此,您将有类似于{mm/dd/yyyy:[将在此mm/dd/yyyy到期的产品]…}(这就像键/值对,其中值是一个列表。。 第二个是字典,在字典中可以有一个hashmap,其中优惠券id作为键,布尔值作为值,指示优惠券是否售出

并且您每天根据第一个映射触发的响应更新第二个hashmap。 所以像这样的

hashmap 1 :{ Today_date:[1234,2345,42234]....tomorrows date:[43225,2508502..]}
因此,这表明哪些优惠券将在今天和明天到期……等等

hashamp 2:{ 1234:1, 2345:0....}
1可能意味着优惠券已经售出

但今天之后日期就过去了。。 您返回产品[1234234542234…],因为这些是设置为过期的优惠券..在hashmap2中:将值为“0”的优惠券的值设置为-1或其他值..表示它们不再可用。。
因此,在hashmap 2中,只有值为0的优惠券id可用..???

我在想这样的事情-生成一个优惠券id,它类似于(发行日期+到期日期+运行计数器(每个发行/到期日期对单独的系列1…N)+校验和),然后具有类似hashmap(到期日期=>hashmap)的东西(IssueDate,BTree))…BTree将存储与已申请的优惠券对应的申请计数器


在我的方法中,我们要做的是生成优惠券id,以便在优惠券id中,我对优惠券发行日期和优惠券到期日期进行编码,并增加计数器值-1,2…N,例如优惠券20120401-20120410-12345-XYZ,然后我只维护BTree中每个发行日期/到期日期对的计数器…此Btree将存储一系列已声明的计数器值,而不是每个计数器都有一个数字。每个问题/到期日对将有一个Btree


但是这个Btree将每个节点都设置为(N1,N2)当所有数字都在N1之间时,你实际的编程问题是什么?问题是创建子例程,它将参数优惠券id作为参数,并返回它是否已被声明或是否已过期。这不是一个问题;这是一个乞求的工作描述。编写你自己的代码!嗨,基本上想了解最好的数据维护优惠券是否已领取的结构我有点讨厌人们盲目地投反对票,因为这不是编程问题。我是说,见鬼。它被标记为“算法”。你怎么能在“算法”中有“编程”问题…我想使用内存中的数据结构使用数据库会慢两步-我将用优惠券idhmmm编码到期日..我想到了这样的想法-生成一个优惠券id,它类似于(发行日期+到期日+运行计数器(每个发行/到期日对单独的系列1…N)+校验和)然后使用HashMap(ExpiryDate=>HashMap(IssueDate,BTree))…BTree将存储与已声明的优惠券对应的声明计数器,但此BTree将每个节点作为(N1,N2)如果所有数字都在N1之间,对不起,我不能理解你的方法。我想,这是可行的。但是如果我错了,请纠正我。但是如果你在hashmap中通过Btree,并且你对所有优惠券ID都这样做。这会不会很贵?反向索引是搜索引擎中使用的一种方法,其中的单词是键和值s是找到该词的文档列表…因此,如果像这样的东西适用于搜索引擎巨头…那么它也应该适用于您。但同样有很多方法可以做到这一点。选择一种您认为对您来说很容易的方法,假设其他方法的性能相同。在我的方法中,我们所做的是生成优惠券id,以便e在优惠券id中,我对优惠券发行日期和优惠券到期日期以及递增计数器值-1,2…N进行编码,例如优惠券20120401-20120410-12345-XYZ,然后我仅维护BTree中每个发行日期/到期日期对的已申请计数器…此BTree,而不是每个已申请计数器都有一个编号will将存储一系列声称的计数器值。每个问题/到期日对将有1个B树。