2012-04-15 73 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