开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4765|回复: 29
收起左侧

[易语言纯源码] 计算文本组合_纯源码_求测试

[复制链接]
结帖率:100% (11/11)
发表于 2018-10-25 22:57:34 | 显示全部楼层 |阅读模式   陕西省渭南市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
也不知道算快的还是慢的.标题也不加快速了.免的被啐了
主要是文本的不定长,没法用汇编加速.如果是整数还差不多.


  
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
文本数组文本型0
子集数组文本型0
计数器整数型 
文本1文本型 
计次循环首 (10, 计数器)
加入成员 (文本数组, 字符 (64 + 计数器))
计次循环尾 ()
求数组组合 (文本数组, 6, 子集数组, )
调试输出 (子集数组)
计次循环首 (20, 计数器)
文本1 = 文本1 + 字符 (64 + 计数器)“,”
计次循环尾 ()
调试输出 (求文本组合 (文本1, 6, , ))
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
求数组组合 求n-m组合
参数名类 型参考可空数组备 注
参_数组文本型组合所有成员
参_组合位数整数型子集成员数
参_返回数组文本型用于存放返回的子集
参_子集分隔符文本型
变量名类 型静态数组备 注
局_增量计数器整数型1到最大值的增量计数
局_位记数总量长整数型组合位数计算
局_成员总数整数型组合成员总数
局_位计数整数型当前增量值的1置位数
局_测试位整数型计算1个数用
局_位测试计数器整数型增量计数位计算计数
局_子集数值文本型子集成员临时值
如果真 (是否为空 (参_子集分隔符))
参_子集分隔符 = “,”
局_成员总数 = 取数组成员数 (参_数组)
局_测试位 = 1
' 求出组合所有成员的使用位数的数值,
计次循环首 (局_成员总数, 局_增量计数器)
局_位记数总量 = 左移 (局_位记数总量, 1)
局_位记数总量 = 位或 (局_位记数总量, 1)
计次循环尾 ()
' 从1开始到最大值,循环求置1位数等于子集位数的数值成员
计次循环首 (局_位记数总量, 局_增量计数器)
局_位计数 = 求1位数 (局_增量计数器, 局_成员总数)
' 符合子集数量的数
如果真 (局_位计数 = 参_组合位数)
局_子集数值 = “”
计次循环首 (局_成员总数, 局_位测试计数器)
' 计算1置位数量
如果真 (求1是否置位 (局_增量计数器, 局_位测试计数器))
局_子集数值 = 局_子集数值 + 参_数组 [局_位测试计数器] + 参_子集分隔符

计次循环尾 ()
局_子集数值 = 取文本左边 (局_子集数值, 取文本长度 (局_子集数值)取文本长度 (参_子集分隔符))
加入成员 (参_返回数组, 局_子集数值)

计次循环尾 ()
子程序名返回值类型公开备 注
求1位数整数型 
参数名类 型参考可空数组备 注
参_数值整数型
参_计算位整数型
置入代码 ({ 81, 82, 139, 69, 8, 139, 77, 12, 49, 210, 209, 216, 115, 1, 66, 226, 249, 137, 208, 90, 89, 201, 194, 8, 0 })
返回 (0)
子程序名返回值类型公开备 注
求1是否置位逻辑型 
参数名类 型参考可空数组备 注
参_数值整数型
参_计算位整数型
置入代码 ({ 81, 82, 139, 69, 8, 186, 1, 0, 0, 0, 139, 77, 12, 73, 211, 226, 133, 208, 117, 4, 49, 192, 235, 3, 49, 192, 64, 90, 89, 201, 194, 8, 0 })
返回 ()
子程序名返回值类型公开备 注
求文本组合文本型 求n-m组合
参数名类 型参考可空数组备 注
参_文本文本型组合所有成员
参_组合位数整数型子集成员数
参_文本分隔符文本型文本内容中分隔符号
参_子集分隔符文本型返回子集中分隔符
变量名类 型静态数组备 注
局_增量计数器整数型1到最大值的增量计数
局_位记数总量长整数型组合位数计算
局_成员总数整数型组合成员总数
局_位计数整数型当前增量值的1置位数
局_测试位整数型计算1个数用
局_位测试计数器整数型增量计数位计算计数
局_子集数值文本型子集成员临时值
局_返回文本文本型返回子集文本
局_文件句柄整数型内存文件句柄
局_文本数组文本型0
如果真 (是否为空 (参_文本分隔符))
参_文本分隔符 = “,”
如果真 (是否为空 (参_子集分隔符))
参_子集分隔符 = “,”
局_文本数组 = 分割文本 (参_文本, 参_文本分隔符, )
局_成员总数 = 取数组成员数 (局_文本数组)
局_测试位 = 1
局_文件句柄 = 打开内存文件 ()
' 求出组合所有成员的使用位数的数值,
调试输出 (参_文本, 取数组成员数 (局_文本数组))
计次循环首 (局_成员总数, 局_增量计数器)
局_位记数总量 = 左移 (局_位记数总量, 1)
局_位记数总量 = 位或 (局_位记数总量, 1)
计次循环尾 ()
' 从1开始到最大值,循环求置1位数等于子集位数的数值成员
计次循环首 (局_位记数总量, 局_增量计数器)
局_位计数 = 求1位数 (局_增量计数器, 局_成员总数)
' 符合子集数量的数
如果真 (局_位计数 = 参_组合位数)
局_子集数值 = “”
计次循环首 (局_成员总数, 局_位测试计数器)
' 计算1置位数量
如果真 (求1是否置位 (局_增量计数器, 局_位测试计数器))
局_子集数值 = 局_子集数值 + 局_文本数组 [局_位测试计数器] + 参_子集分隔符

计次循环尾 ()
写出文本 (局_文件句柄, 取文本左边 (局_子集数值, 取文本长度 (局_子集数值)取文本长度 (参_子集分隔符)) + #换行符 )

计次循环尾 ()
移动读写位置 (局_文件句柄, #文件首, 0)
局_返回文本 = 读入文本 (局_文件句柄, )
关闭文件 (局_文件句柄)
返回 (局_返回文本)


i支持库列表   支持库注释   
spec特殊功能支持库

求组合-1.e

99.51 KB, 下载次数: 46, 下载积分: 精币 -2 枚

评分

参与人数 1好评 +1 精币 +2 收起 理由
超级の赛亚人 + 1 + 2 感谢分享,很给力!~

查看全部评分


结帖率:100% (11/11)

签到天数: 28 天

 楼主| 发表于 2018-10-26 08:48:28 | 显示全部楼层   陕西省渭南市
优化第一版

  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
文本数组文本型0
子集数组文本型0
计数器整数型 
文本1文本型 
时间1整数型 
时间1 = 取启动时间 ()
计次循环首 (10, 计数器)
加入成员 (文本数组, 字符 (64 + 计数器))
计次循环尾 ()
求数组组合 (文本数组, 3, 子集数组, )
调试输出 (子集数组, 取启动时间 () - 时间1)
时间1 = 取启动时间 ()
计次循环首 (10, 计数器)
文本1 = 文本1 + 字符 (64 + 计数器)“,”
计次循环尾 ()
求文本组合 (文本1, 4, , )
调试输出 (取启动时间 () - 时间1)
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
求数组组合 求n-m组合
参数名类 型参考可空数组备 注
参_数组文本型组合所有成员
参_组合位数整数型子集成员数
参_返回数组文本型用于存放返回的子集
参_子集分隔符文本型
变量名类 型静态数组备 注
局_增量计数器整数型1到最大值的增量计数
局_位记数总量长整数型组合位数计算
局_成员总数整数型组合成员总数
局_位计数整数型当前增量值的1置位数
局_测试位整数型计算1个数用
局_位测试计数器整数型增量计数位计算计数
局_子集数值文本型子集成员临时值
局_文件句柄整数型 
局_写子集次数整数型 
如果真 (是否为空 (参_子集分隔符))
参_子集分隔符 = “,”
局_成员总数 = 取数组成员数 (参_数组)
局_测试位 = 1
' 求出组合所有成员的使用位数的数值,
取变量地址 (局_位记数总量)
求置位数值 (局_成员总数)
调试输出 (“循环次数”, 局_位记数总量)
' 从1开始到最大值,循环求置1位数等于子集位数的数值成员
计次循环首 (局_位记数总量, 局_增量计数器)
局_位计数 = 求1位数 (局_增量计数器, 局_成员总数)
' 符合子集数量的数
如果真 (局_位计数 = 参_组合位数)
局_子集数值 = “”
局_文件句柄 = 打开内存文件 ()
计次循环首 (局_成员总数, 局_位测试计数器)
' 计算1置位数量
局_写子集次数 = 0
如果真 (求1是否置位 (局_增量计数器, 局_位测试计数器))
局_写子集次数 = 局_写子集次数 + 1
如果 (局_写子集次数 < 参_组合位数)
写出文本 (局_文件句柄, 参_数组 [局_位测试计数器] + 参_子集分隔符)
写出文本 (局_文件句柄, 参_数组 [局_位测试计数器])


计次循环尾 ()
移动读写位置 (局_文件句柄, #文件首, 0)
加入成员 (参_返回数组, 读入文本 (局_文件句柄, ))
关闭文件 (局_文件句柄)

计次循环尾 ()
子程序名返回值类型公开备 注
求1位数整数型 
参数名类 型参考可空数组备 注
参_数值整数型
参_计算位整数型
置入代码 ({ 81, 82, 139, 69, 8, 139, 77, 12, 49, 210, 209, 216, 115, 1, 66, 226, 249, 137, 208, 90, 89, 201, 194, 8, 0 })
返回 (0)
子程序名返回值类型公开备 注
求1是否置位逻辑型 
参数名类 型参考可空数组备 注
参_数值整数型
参_计算位整数型
置入代码 ({ 81, 82, 139, 69, 8, 186, 1, 0, 0, 0, 139, 77, 12, 73, 211, 226, 133, 208, 117, 4, 49, 192, 235, 3, 49, 192, 64, 90, 89, 201, 194, 8, 0 })
返回 ()
子程序名返回值类型公开备 注
求文本组合文本型 求n-m组合
参数名类 型参考可空数组备 注
参_文本文本型组合所有成员
参_组合位数整数型子集成员数
参_文本分隔符文本型文本内容中分隔符号
参_子集分隔符文本型返回子集中分隔符
变量名类 型静态数组备 注
局_增量计数器整数型1到最大值的增量计数
局_位记数总量长整数型组合位数计算
局_成员总数整数型组合成员总数
局_位计数整数型当前增量值的1置位数
局_测试位整数型计算1个数用
局_位测试计数器整数型增量计数位计算计数
局_子集数值文本型子集成员临时值
局_返回文本文本型返回子集文本
局_文件句柄整数型内存文件句柄
局_文本数组文本型0组合成员数组
局_写子集次数整数型临时计次变量
如果真 (是否为空 (参_文本分隔符))
参_文本分隔符 = “,”
如果真 (是否为空 (参_子集分隔符))
参_子集分隔符 = “,”
局_文本数组 = 分割文本 (参_文本, 参_文本分隔符, )
局_成员总数 = 取数组成员数 (局_文本数组)
局_测试位 = 1
局_文件句柄 = 打开内存文件 ()
' 求出组合所有成员的使用位数的数值,
取变量地址 (局_位记数总量)
求置位数值 (局_成员总数)
调试输出 (“循环次数”, 局_位记数总量)
' 从1开始到最大值,循环求置1位数等于子集位数的数值成员
计次循环首 (局_位记数总量, 局_增量计数器)
局_位计数 = 求1位数 (局_增量计数器, 局_成员总数)
' 符合子集数量的数
如果真 (局_位计数 = 参_组合位数)
局_子集数值 = “”
局_写子集次数 = 0
计次循环首 (局_成员总数, 局_位测试计数器)
' 计算1置位数量
如果真 (求1是否置位 (局_增量计数器, 局_位测试计数器))
局_写子集次数 = 局_写子集次数 + 1
如果 (局_写子集次数 < 参_组合位数)
写出文本 (局_文件句柄, 局_文本数组 [局_位测试计数器] + 参_子集分隔符)
写出文本 (局_文件句柄, 局_文本数组 [局_位测试计数器]#换行符 )


计次循环尾 ()

计次循环尾 ()
移动读写位置 (局_文件句柄, #文件首, 0)
局_返回文本 = 读入文本 (局_文件句柄, )
关闭文件 (局_文件句柄)
返回 (局_返回文本)
子程序名返回值类型公开备 注
求置位数值  
参数名类 型参考可空数组备 注
参_置位次数整数型
置入代码 ({ 82, 81, 139, 77, 8, 49, 210, 66, 73, 249, 209, 210, 226, 251, 137, 16, 89, 90 })


i支持库列表   支持库注释   
spec特殊功能支持库

求文本组合.e

8.43 KB, 下载次数: 17, 下载积分: 精币 -2 枚

回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 28 天

 楼主| 发表于 2018-10-26 16:45:32 | 显示全部楼层   陕西省渭南市
不出错的话.可能就是最终优化了.速度上差不多就是这样了.

  
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
文本数组文本型0
子集数组文本型0
计数器整数型 
文本1文本型 
时间1整数型 
时间1 = 取启动时间 ()
计次循环首 (20, 计数器)
加入成员 (文本数组, 字符 (64 + 计数器))
计次循环尾 ()
求数组组合 (文本数组, 6, 子集数组, )
调试输出 (取启动时间 () - 时间1)
时间1 = 取启动时间 ()
计次循环首 (20, 计数器)
文本1 = 文本1 + 字符 (64 + 计数器)“,”
计次循环尾 ()
求文本组合 (文本1, 6, , )
调试输出 (取启动时间 () - 时间1)
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
求数组组合 求n-m组合
参数名类 型参考可空数组备 注
参_数组文本型组合所有成员
参_组合位数整数型子集成员数
参_返回数组文本型用于存放返回的子集
参_子集分隔符文本型
变量名类 型静态数组备 注
局_成员总数整数型组合成员总数
局_文件句柄整数型 
局_写子集次数整数型 
局_符合数值整数型 
局_数组偏移位置整数型 
如果真 (是否为空 (参_子集分隔符))
参_子集分隔符 = “,”
局_成员总数 = 取数组成员数 (参_数组)
局_符合数值 = 求下一符合数 (1, 参_组合位数, 局_成员总数)
判断循环首 (局_符合数值 ≠ 0)
局_符合数值 = 求下一符合数 (局_符合数值, 参_组合位数, 局_成员总数)
如果真 (局_符合数值 = 0)
跳出循环 ()
局_文件句柄 = 打开内存文件 ()
计次循环首 (参_组合位数, 局_写子集次数)
局_数组偏移位置 = 求下一置位 (局_符合数值, 局_写子集次数)
如果 (局_写子集次数 < 参_组合位数)
写出文本 (局_文件句柄, 参_数组 [局_数组偏移位置] + 参_子集分隔符)
写出文本 (局_文件句柄, 参_数组 [局_数组偏移位置])

计次循环尾 ()
移动读写位置 (局_文件句柄, #文件首, 0)
加入成员 (参_返回数组, 读入文本 (局_文件句柄, ))
关闭文件 (局_文件句柄)
判断循环尾 ()
子程序名返回值类型公开备 注
求下一符合数整数型 
参数名类 型参考可空数组备 注
参_起始数值整数型
参_子集成员整数型
参_组合成员整数型
置入代码 ({ 86, 87, 82, 81, 83, 139, 77, 16, 49, 246, 249, 209, 214, 226, 251, 139, 125, 8, 71, 139, 85, 12, 49, 201, 137, 248, 15, 188, 216, 116, 6, 15, 187, 216, 65, 235, 245, 57, 209, 116, 13, 71, 57, 247, 127, 6, 49, 201, 137, 248, 235, 230, 49, 255, 137, 248, 91, 89, 90, 95, 94, 201, 194, 12, 0 })
返回 (0)
子程序名返回值类型公开备 注
求下一置位整数型 
参数名类 型参考可空数组备 注
参_当前值整数型
参_位计数整数型
置入代码 ({ 81, 83, 139, 69, 8, 139, 77, 12, 15, 188, 216, 15, 187, 216, 226, 248, 137, 216, 64, 91, 89, 201, 194, 8, 0 })
返回 (0)
子程序名返回值类型公开备 注
求文本组合文本型 求n-m组合
参数名类 型参考可空数组备 注
参_文本文本型组合所有成员
参_组合位数整数型子集成员数
参_分隔符文本型
参_子集分隔符文本型
变量名类 型静态数组备 注
局_成员总数整数型组合成员总数
局_文件句柄整数型 
局_写子集次数整数型 
局_符合数值整数型 
局_数组偏移位置整数型 
局_文本数组文本型0
局_返回值文本型 
如果真 (是否为空 (参_子集分隔符))
参_子集分隔符 = “,”
如果真 (是否为空 (参_分隔符))
参_分隔符 = “,”

局_文本数组 = 分割文本 (参_文本, 参_分隔符, )
局_成员总数 = 取数组成员数 (局_文本数组)
局_符合数值 = 求下一符合数 (1, 参_组合位数, 局_成员总数)
局_文件句柄 = 打开内存文件 ()
判断循环首 (局_符合数值 ≠ 0)
局_符合数值 = 求下一符合数 (局_符合数值, 参_组合位数, 局_成员总数)
如果真 (局_符合数值 = 0)
跳出循环 ()

计次循环首 (参_组合位数, 局_写子集次数)
局_数组偏移位置 = 求下一置位 (局_符合数值, 局_写子集次数)
如果 (局_写子集次数 < 参_组合位数)
写出文本 (局_文件句柄, 局_文本数组 [局_数组偏移位置] + 参_子集分隔符)
写出文本 (局_文件句柄, 局_文本数组 [局_数组偏移位置]#换行符 )

计次循环尾 ()
判断循环尾 ()
移动读写位置 (局_文件句柄, #文件首, 0)
局_返回值 = 读入文本 (局_文件句柄, )
关闭文件 (局_文件句柄)
返回 (局_返回值)


i支持库列表   支持库注释   
spec特殊功能支持库

点评

请楼主检查一下代码,会遗漏组合内容。 以“求数组组合”命令为例,求{ “1”, “2”, “3”, “4”, “5” }这个文本数组按2位进行组合,会遗漏“1,2”这个组合。 求文本组合命令也类似   辽宁省大连市  发表于 2018-12-18 17:01
回复 支持 反对

使用道具 举报

发表于 2020-1-17 19:02:39 | 显示全部楼层   广西壮族自治区崇左市
都是会的人啊,学习中
回复 支持 反对

使用道具 举报

结帖率:88% (7/8)

签到天数: 15 天

发表于 2020-1-13 17:06:33 | 显示全部楼层   江苏省南通市
下载下来以后可能 用得上
回复 支持 反对

使用道具 举报

结帖率:41% (12/29)

签到天数: 4 天

发表于 2019-3-23 18:25:06 | 显示全部楼层   河南省周口市
强大,感谢分享
回复 支持 反对

使用道具 举报

结帖率:41% (12/29)

签到天数: 4 天

发表于 2019-3-23 18:21:52 | 显示全部楼层   河南省周口市
此帖仅作者可见
回复 支持 反对

使用道具 举报

结帖率:64% (25/39)

签到天数: 22 天

发表于 2018-12-18 21:02:53 | 显示全部楼层   辽宁省大连市
本帖最后由 dangerace 于 2018-12-18 21:09 编辑
jr21066 发表于 2018-12-18 20:00
不知啥时修正过.忘上传了.现在补上.

如图所示,我测试50个元素按3位进行组合,正确结果应该是有19600个组合。另外,如果继续加大元素数量以及位数,您的算法会直接返回0。例如100-5

刚才继续随意修改元素数量和位数进行测试,发现当元素数量在30以下时结果都是正确的,不过运算速度不稳定,例如您可以试一下30-2或者30-3,速度都很快,但30-4时耗时会突然飙升。

我用来对比速度的是一位网名叫birdmanxp的大牛编写的排列组合模块,他的模块的计算速度基本是线性的,比较稳定。


捕获.PNG

点评

https://blog.csdn.net/huangfei711/article/details/79910600 算法也不复杂.是这个.   陕西省渭南市  发表于 2018-12-18 23:53
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 28 天

 楼主| 发表于 2018-12-18 20:00:27 | 显示全部楼层   陕西省渭南市
不知啥时修正过.忘上传了.现在补上.

文本取组合.e

7.32 KB, 下载次数: 14, 下载积分: 精币 -2 枚

点评

实现是利用一个32位数来计位的.所以取结果是32以内.在我这边基本取十多个就会非常卡了.所以没有做太多位数的代码.   陕西省渭南市  发表于 2018-12-18 23:51
我测试了一下,如果我的代码没有问题的话,您的算法还是存在漏洞,计算结果不正确。详情请见我的回复。如您有时间,希望能够修正一下。   辽宁省大连市  发表于 2018-12-18 20:58
回复 支持 反对

使用道具 举报

结帖率:80% (16/20)
发表于 2018-12-2 14:13:42 | 显示全部楼层   广西壮族自治区钦州市
太太太强大了
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 23 天

发表于 2018-10-27 14:20:00 | 显示全部楼层   山东省青岛市
感谢分享,虽然看懵了
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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