设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 2616|回复: 2
收起左侧

易语言 BitMap算法短整数型数组非排序去重 (10秒处理1亿数据,比吃尾算法快N百万倍)

[复制链接]
发表于 2020-3-17 11:25:12 | 显示全部楼层 |阅读模式
本帖最后由 CNWTEPRG 于 2020-3-17 11:26 编辑

1.png

  1. .版本 2

  2. .程序集 程序集1

  3. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码


  4. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  5. 返回 (0)  ' 可以根据您的需要返回任意数值

  6. .子程序 _临时子程序
  7. .局部变量 默认数组, 短整数型, , "100000000"
  8. .局部变量 数组, 短整数型, , "0"
  9. .局部变量 新算法处理结果, 短整数型, , "0"
  10. .局部变量 计数, 整数型
  11. .局部变量 时间, 整数型

  12. 置随机数种子 ()
  13. 输出调试文本 (“正在初始化数组...”)
  14. 时间 = 取启动时间 ()
  15. .计次循环首 (取数组成员数 (默认数组), 计数)
  16.     默认数组 [计数] = 取随机数 (, ) × 取随机数 (, )
  17. .计次循环尾 ()
  18. 数组 = 默认数组
  19. 输出调试文本 (“初始化耗时(毫秒):” + 到文本 (取启动时间 () - 时间))
  20. 输出调试文本 (“正在去重(BitMap算法)”)
  21. 时间 = 取启动时间 ()
  22. 短整数型数组_去重_BitMap (数组)
  23. 输出调试文本 (“BitMap算法耗时(毫秒):” + 到文本 (取启动时间 () - 时间))
  24. 新算法处理结果 = 数组
  25. 数组 = 默认数组
  26. 输出调试文本 (“正在去重(吃尾算法)”)
  27. 时间 = 取启动时间 ()
  28. 短整数型数组_去重_吃尾 (数组)
  29. 输出调试文本 (“吃尾算法耗时(毫秒):” + 到文本 (取启动时间 () - 时间))

  30. 输出调试文本 (选择 (短整数型数组_等于 (数组, 新算法处理结果), “处理结果一致”, “处理结果不一致”))






  31. .子程序 短整数型数组_去重_吃尾
  32. .参数 数组, 短整数型, 参考 数组
  33. .局部变量 外循环, 整数型
  34. .局部变量 内循环, 整数型

  35. .计次循环首 (取数组成员数 (数组), 外循环)
  36.     .变量循环首 (取数组成员数 (数组), 外循环 + 1, -1, 内循环)
  37.         .如果真 (数组 [外循环] = 数组 [内循环])
  38.             删除成员 (数组, 内循环, )

  39.         .如果真结束

  40.     .变量循环尾 ()
  41. .计次循环尾 ()


  42. .子程序 短整数型数组_去重_BitMap, , 公开
  43. .参数 数组, 短整数型, 参考 数组
  44. .局部变量 位映射表, 字节型, , "65536"
  45. .局部变量 计数, 整数型
  46. .局部变量 索引, 整数型
  47. .局部变量 数组副本, 短整数型, , "0"

  48. .计次循环首 (取数组成员数 (数组), 计数)
  49.     索引 = 短整数处理 (数组 [计数])
  50.     .如果真 (位映射表 [索引] = 0)
  51.         加入成员 (数组副本, 数组 [计数])
  52.         位映射表 [索引] = 1
  53.         到循环尾 ()
  54.     .如果真结束

  55. .计次循环尾 ()
  56. 数组 = 数组副本



  57. .子程序 短整数处理, 整数型, , 短整数(-32768~32767)到无符号整数(0~65535)并加1
  58. .参数 短整数, 短整数型

  59. 置入代码 ({ 102, 139, 69, 8, 15, 183, 192, 64, 201, 194, 4, 0 })
  60. ' mov ax,[ebp+8]
  61. ' movzx eax,ax
  62. ' inc eax
  63. ' leave
  64. ' retn 4
  65. 返回 (0)

  66. .子程序 短整数型数组_等于, 逻辑型
  67. .参数 数组A, 短整数型, 数组
  68. .参数 数组B, 短整数型, 数组
  69. .局部变量 成员数, 整数型
  70. .局部变量 计数, 整数型

  71. 成员数 = 取数组成员数 (数组A)
  72. .如果真 (成员数 ≠ 取数组成员数 (数组B))
  73.     返回 (假)
  74. .如果真结束
  75. .计次循环首 (成员数, 计数)
  76.     .如果真 (数组A [计数] ≠ 数组B [计数])
  77.         返回 (假)
  78.     .如果真结束

  79. .计次循环尾 ()
  80. 返回 (真)

复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-20 03:41 , Processed in 0.598034 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表