Homework_6

“为什么大家都在缅怀某人?不懂,极端严重病态的投机主义者,满嘴跑火车。勇气略可嘉而已。”,“可能是大形势下,跟风有逼格。”,“也有可能是借他这个所谓“符号”来发声而已”。

Homework 6挺绕的,略难,很有趣。

一个一个method记录。


First constructor带一个估计的item总量,然后要产生n/0.5~1.0内的bucket。我选了0.6这个数附近。且bucket数最好是prime number,所以写了个private helper来找prime number。大于n/0.6后的第一个prime number就是我的bucket。

之后记得把所以bucket数的SList也initialize(也就是给remote control分配具体的object)。

Second Constructor的话,直接选101就得了。


compFunction感觉有点迷,也可以说略有技巧。ab这俩数不知道该咋选,code我加了abs,把负转正。N就是bucket数,p是个很有技巧的选择【?】。

因为要求p>>N所以,N的length一定程度上决定了p的length,而且p还必须是prime number。不过幸好自然界有些神奇的prime number,比如233333...往后加多少个3,他都是prime number。所以用N的长度来控制往后加3的个数(String型),最后再将这个String型换成int或Long就好。


Insert这个method,我用了曾经homework 5用的SList,本来想自己在construct一个头尾相连无sentinel的List(方便random select and find),但,不想在自己给自己找事了。

直接找到SList【index】,然后insertback进去就好。注意,insert的是一个entry,entry中包含key和value。key就相当于是词典中的单词,value就相当于是这个单词的definition。


find和remove差不多,这里就着重讲一下find得了。为了能random find,我先随机产生了一个小于等于这个SList length的数,然后用next这个method,walk through到某个node。其实overal就是,随机的选择一个起始node。find的时候,顺着这个起始node next next的找就行。应该还有其他更好的方法,比如,随机一个数n,找到第n个跟这个key一样的node,并返回这个node。

除此之外,还需要特别注意,随机起始node,很有可能随机到很接近tail,这时如果find到tail了,还得back to head。这就是写个头尾相连不要sentinel node的好处。必要考虑这点。

如果遍历这个node上node.length个entry都没有找到的话,别忘跳出循环,否则陷入死循环。

综上所述,感觉,“随机一个数n,从entry 0开始找,找到第n个跟这个key一样的node,并返回这个node”这个方法更好一点啊...


remove和empty都比较简单。


SimpleBoard这个class,想要把3的64次方这个hashcode存储,得需要BigInteger这个Java build-in class来帮助。equal就比较this和board的BigInteger objects一不一样就行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值