⑴ 演算法之21 | 開放定址法
開放定址法是散列存儲中使用的一種碰撞解決方法,其核心是在散列表中存儲所有元素。每個存儲位置或包含一個動態集合的元素或者NIL。查詢元素時,需要連續檢查所有存儲位置,直至找到目標元素或確認元素不存在。
進行元素插入時,需要沿著連續的表項進行探查,直到找到一個空的存儲位置。選擇的探查順序依賴於插入元素的關鍵字,並不遵循固定的從0到m的序列。
散列函數需要修改以包含探查號碼,這樣對於每個關鍵字,都能按照特定的探查序列進行搜索,序列為 (h(k,0),h(k,1),…, h(k,m-1))。
開放定址法的思路是,如果某個關鍵字被佔用,將其移動到下一個位置,直至找到空槽插入。相比鏈式法,它無需使用指針,因此可以節約指針所佔用的空間,允許存儲更多的槽。
然而,開放定址法的刪除操作存在缺點。一旦刪除某個關鍵字,後續的關鍵字查找可能受到影響。為解決此問題,可以使用特定值替代,使得查找時間不再依賴於負載因子α。
假設每個關鍵字的探查序列等可能地為從0到m-1中的排列之一,以實現均勻散列。針對不成功的查找,開放定址法的期望探查次數有理論上限,具體通過定理給出。當關鍵字集合保持靜態時,可使用完全散列,通過兩級散列方法設計,確保在最壞情況下以O(1)時間完成查找。
⑵ 商品打折的正確演算法是什麼
折扣的三個計算公式如下:
1、原價×(折扣÷10),例如:原價是70元,打三折,就是:70×(3÷10)=21。
2、原價×折扣/10,例如:原價是40元,打五折,就是:40×5/10=20。
3、原價×0.折扣,例如:原價是100元,打一折,就是:100×0.1=10。
打折的特徵
(1)打折是商品購銷中的讓利,發生在購銷雙方當事人之間,是賣方給予買方的價格優惠。
(2)給予或者接受折扣都必須明示並如實入賬,在入賬方式上,要求給予折扣的應沖減營業收入,收受折扣的應沖減成本。
(3)打折的兩種形式。一是支付價款時對價款總額按一定比例即時予以扣除。二是在買方已支付價款總額後賣方再按一定比例予以退還部分價款。這兩種形式實質都是價格優惠,並無本質區別。