|
分享源码
界面截图: |
|
是否带模块: |
纯源码 |
备注说明: |
- |
本帖最后由 梦幻1096 于 2024-11-10 14:00 编辑
变量名 | 类 型 | 静态 | 数组 | 备 注 | 链表地址 | 整数型 | | | 链表长度 | 整数型 | | | 键数量 | 整数型 | | | 预设内存大小 | 整数型 | | | 预设内存指针 | 整数型 | | | 申请内存记录 | 整数型 | | 0 | 扩容触发点 | 整数型 | | | 表位置 | 整数型 | | | 链表节点 | 整数型 | | | 节点地址 | 整数型 | | | 文本地址 | 整数型 | | | 文本长度 | 整数型 | | | 哈希值 | 整数型 | | | 是否重复 | 逻辑型 | | | a | 整数型 | | | b | 整数型 | | | c | 整数型 | | | d | 整数型 | | | e | 整数型 | | | f | 整数型 | | | i | 整数型 | | | j | 整数型 | | | 如果真 (取数组成员数 (文本数组 ) ≤ 1 )返回 (取数组成员数 (文本数组 ))
链表长度 = 16 链表地址 = 申请内存 (左移 (链表长度, 2 ), 真) 如果真 (取数组成员数 (文本数组 ) > 10000 )预设内存大小 = 取数组成员数 (文本数组 ) × 4 加入成员 (申请内存记录, 申请内存 (预设内存大小, 真)) 预设内存指针 = 申请内存记录 [1 ] 扩容触发点 = 链表长度 × 0.75 计次循环首 (取数组成员数 (文本数组 ), i ) 文本地址 = 取变量数据地址 (文本数组 [i ])如果真 (文本地址 = 0 )到循环尾 ()文本长度 = 取文本长度 (文本数组 [i]) c = 文本长度 \ 4 d = 文本长度 % 4 a = 十六进制 (“811c9dc5”)b = 十六进制 (“01000193”)e = 文本地址 如果真 (c ≠ 0 )计次循环首 (c, j )f = 指针到整数 (e )a = 位异或 (a, f ) × b e = e + 4 计次循环尾 ()如果真 (d ≠ 0 )f = 左移 (指针到整数 (e ), (4 - d ) × 8 )a = 位异或 (a, f ) × b 哈希值 = 取绝对值 (a) 表位置 = 哈希值 (链表长度 - 1 ) + 1 链表节点 = 链表地址 + 左移 (表位置, 2 )节点地址 = 指针到整数 (链表节点 ) 判断循环首 (节点地址 ≠ 0 )如果真 (哈希值 = 指针到整数 (节点地址 )) 如果真 (文本长度 = 指针到整数 (节点地址 + 8 )) 如果真 (文本数组 [i ] = 文本数组 [指针到整数 (节点地址 + 12 )]) 是否重复 = 真 跳出循环 () 链表节点 = 节点地址 + 4
节点地址 = 指针到整数 (链表节点 ) 判断循环尾 ()如果真 (是否重复 = 真)是否重复 = 假 到循环尾 () 如果 (预设内存指针 = 0 )节点地址 = 申请内存 (16, 真) 加入成员 (申请内存记录, 节点地址 ) 如果真 (预设内存大小 < 16 )预设内存大小 = 取数组成员数 (文本数组 ) × 4 加入成员 (申请内存记录, 申请内存 (预设内存大小, 真)) 预设内存指针 = 申请内存记录 [取数组成员数 (申请内存记录 )]节点地址 = 预设内存指针预设内存指针 = 预设内存指针 + 16 预设内存大小 = 预设内存大小 - 16 写到内存 (节点地址, 链表节点, ) 写到内存 (哈希值, 节点地址, )写到内存 (文本长度, 节点地址 + 8, ) 键数量 = 键数量 + 1 如果真 (键数量 ≠ i ) 交换变量 (文本数组 [键数量 ], 文本数组 [i ])写到内存 (键数量, 节点地址 + 12, ) 如果真 (键数量 ≥ 扩容触发点 )j = 左移 (链表长度, 1 )f = 申请内存 (左移 (j, 2 ), 真)变量循环首 (链表地址, 链表地址 + 左移 (链表长度 - 1, 2 ), 4, c )e = 指针到整数 (c )判断循环首 (e ≠ 0 )哈希值 = 指针到整数 (e )表位置 = 哈希值 (j - 1 ) + 1 a = f + 左移 (表位置, 2 )b = 指针到整数 (a )判断循环首 (b ≠ 0 )a = b + 4 b = 指针到整数 (a )判断循环尾 ()写到内存 (e, a, )c = e + 4 e = 指针到整数 (c )写到内存 (0, c, )判断循环尾 ()变量循环尾 () 释放内存 (链表地址 )链表地址 = f 链表长度 = j 扩容触发点 = 链表长度 × 0.75 计次循环尾 () 计次循环首 (取数组成员数 (申请内存记录 ), i )释放内存 (申请内存记录 [i ])计次循环尾 () 释放内存 (链表地址 ) 重定义数组 (文本数组, 真, 键数量 )返回 (键数量 )
纯的不能再纯的源码,完全用的易语言代码的方式写的,效率挺高的,1000万只需5秒,不过说是这么说,但是单条文本太长的话就要慢一些,总之比一般的去重都要快很多吧,而且这个是独立为1个子程序的,不需要什么模块 DLL啥的,写了我几个小时,免费分享给你们吧!有啥问题bug啥的评论区留言!
将保存文本数据改成了保存文本指针,减少了内存开销!,修复了文本指针为0(也就是数组里面存在空文本的情况)又又又更新了一下,将保存文本指针改成保存文本下标,效率又可以提升不少!
|
评分
-
查看全部评分
|