⑴ 算法之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)打折的两种形式。一是支付价款时对价款总额按一定比例即时予以扣除。二是在买方已支付价款总额后卖方再按一定比例予以退还部分价款。这两种形式实质都是价格优惠,并无本质区别。