- 积分
- 10908
- 明经币
- 个
- 注册时间
- 2015-8-18
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2024-7-24 21:06:16
|
显示全部楼层
本帖最后由 你有种再说一遍 于 2024-7-25 02:07 编辑
并不是每个都判断一下很慢,而是判断的方式问题,
写lisp的人没有注意到,
很多时候写了双for去比较数据,或者调用remove-if,
你怎么知道这个remove-if是双for还是排序后剔除,还是词典呢?它的时间复杂度...
然后这个循环还不能中断,
在其他语言则不是,其他语言的优点:
1,数组array能够通过index,这是CPU寻址速度,嘎嘎快.
2,循环可以break.
3,数据结构可以O(1)速度.
4,处理图元不是每个都启动事务,能够更快的进行数据路由.
消重不应该是全部加入集合再剔除,而是加入时候剔除,
例如使用数据结构:词典或者红黑树就天然可以剔除重复项,
lisp针对第三点,可以调用vb词典:
和尚777这里就用了dictionary词典来减少时间复杂度
http://bbs.mjtd.com/thread-186202-1-1.html
词典的原理就是利用数组寻址速度,
1,计算字符串的hashcode,
2,hashcode取模,获取数组索引下标:
int index=array.length%hashcode
3,key是array[index]获取,因为hash冲突,所以索引相同不一定内容相同,接着内部会通过equals比较.
4,如果相同的,就取出value内容,你的value是计数器int,然后++.
这也就是,lisp的终点是调用vb...vb的终点的换到c#或c++
|
|