免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4118 | 回复: 25
打印 上一主题 下一主题

[文本处理] 相乘 算法 [复制链接]

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-04-07 13:27 |只看该作者 |倒序浏览
本帖最后由 Windows19 于 2018-04-07 16:22 编辑

各位大大
请看123楼结果描述
有一个算法相乘要求 是这样的  下面就用题来说明一下相乘规律

需要2种不同算法 希望可以用命令能够完成  希望大家帮助一下,谢谢大家
第1种算法需求, 不相乘自身

第2种算法需求, 相乘自身 (已实现)

例如
cat file
a
123
.
/
上面内容都在一个文本中,只举了例子3行  其实行数很多,大概有几千行, 需求要不相乘自身的

根据上面材料,下面是得出不相乘自身字符串结果  这个还没实现!

a123.
a.123

123.a
123a.

.123a
.a123

而下面是得出相乘自身字符串结果
aaa
aa123
aa.
a123a
a123123
a123.
a.a
a.123
a..
123aa
123a123
123a.
123123a
123123123
123123.
123.a
123.123
123..
.aa
.a123
.a.
.123a
.123123
.123.
..a
..123
...

由此可以看出上面乘法规律 他们都是扩展3次相乘每行字符串 (分别就是相乘自身与不相乘自身字符串2种)

论坛大哥写出了相乘自身算法命令 但是不能排除与自身字符串相乘算法

现希望可以改变为不相乘自身字符串


他的相乘自身算法是这样写的    优点可以改相乘4次或多次

  1. awk -vmaxdepth=3 'function rev(_ARGVEND_,i){deep++;for(i=0;i++<NR;){s=s?s""a[i]:a[i];if(deep==maxdepth){print s}else{rev()};s=substr(s,1,length(s)-length(a[i]))};deep--}{$0==""?NR--:a[++i]=$0}END{rev()}' file
复制代码



现在需求的是 不相乘自身算法命令

何为不相乘自身?  我简单解一下相乘自身特点, 就能不难理解出不相乘自身了

例如
abc123.abc


123.abc123abc

123123


abcabc


上面都在一行中出现了至少有一组相同字符串,这种就是自身与自身相乘算法 (而不相乘自身字符串,在每行中是没有一组字符串相同的)

所以,要排除上面这种自身相乘行,又可以选择扩展乘法次数 例如(awk -vmaxdepth=1,4)
请问如何写呢?谢谢各位帮忙 谢谢

补充一下输出结果

cat file
a
123
.
/

2组不乘自身字符串算法结果应该是
a123
a.
a/

123a
123.
123/

.a
.123
./

/a
/123
/.

3组不乘自身字符串算法 待测......



已在123楼给出结果需求....




论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
2 [报告]
发表于 2018-04-07 14:39 |只看该作者
本帖最后由 Windows19 于 2018-04-07 15:48 编辑


cat file
a
123
.
/



人工补充
补充3组不乘自身字符串算法结果应该是(人工算法,不知道还有没有遗留哦...如有还请指正)

a123.
a.123
a./
a/.
a123/
a/123

123/a
123a/
123.a
123a.
123./
123/.

./123
.123/
.123a
.a123
./a
.a/

/a123
/123a
/.123
/123.
/a.
/.a


论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
3 [报告]
发表于 2018-04-07 15:43 |只看该作者
本帖最后由 Windows19 于 2018-04-07 16:28 编辑

5组不乘自身字符串算法......人脑无法算出
cat file
a
123
.
/

下面是
4组不乘自身字符串算法结果应该是(人脑算可能有遗留...还请指正)

a123./
a123/.
a.123/
a./123
a/123.
a/.123

123a./
123a/.
123.a/
123./a
123/a.
123/.a

.123/a
.123a/
.a123/
.a/123
./123a
./a123

/a123.
/a.123
/123.a
/123a.
/.123a
/.a123

例如下面123字符串出现在一行中的就是自身相乘,不符合
/123a123





论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
4 [报告]
发表于 2018-04-07 16:05 |只看该作者
本帖最后由 Windows19 于 2018-04-07 16:09 编辑

哥们请帮忙
小弟我脑子不够使啦

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2018-04-07 16:28 |只看该作者
ABC
  ABC,ACB, BCA,BAC, CAB,CBA

ABCD
ABCD,ABDC,ACDB,ACBD, ...

----------------------------------------------
3 combine => 3*2*1 = 3! = 6
4 combine =>4*3*2*1 = 4! = 24
5 combine => 5*4*3*2*1= 5! = 120 => 3 digits
...
10 combine = 10! = 9*8*7*..3*2*1 = 3628800 => 7 digits
100 combine = 100! => 158 digits
1000 combine = 1000! => 2568 digits

$ echo 10 | awk '{for(n=$1;n>0;n-=1){digit+=log(n)/log(10)};print int(digit)+1" digits"}'
7 digits

$ echo 100 | awk '{for(n=$1;n>0;n-=1){digit+=log(n)/log(10)};print int(digit)+1" digits"}'
158 digits

$ echo 1000 | awk '{for(n=$1;n>0;n-=1){digit+=log(n)/log(10)};print int(digit)+1" digits"}'
2568 digits

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
6 [报告]
发表于 2018-04-07 16:47 |只看该作者
回复 5# jason680
大哥
行数不是很多 几百行左右  1,2,3,4组就行     可以不要5组的

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
7 [报告]
发表于 2018-04-07 17:04 |只看该作者
回复 5# jason680
用这个出来行数不是很多   只是他相乘了自身行数才多了很多,  如果排除相乘自身行, 行数那会少一半左右的
awk -vmaxdepth=4 'function rev(_ARGVEND_,i){deep++;for(i=0;i++<NR{s=s?s""a:a;if(deep==maxdepth){print s}else{rev()};s=substr(s,1,length(s)-length(a))};deep--}{$0==""?NR--:a[++i]=$0}END{rev()}' file

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2018-04-07 17:37 |只看该作者
100取3,取4
$ echo 100 3 | awk '{a=b=1;for(n=1;n<=$2;n+=1){a*=$1;b*=($1-n)};print a,b,b/a}'
1000000 941094 0.941094
$ echo 100 4 | awk '{a=b=1;for(n=1;n<=$2;n+=1){a*=$1;b*=($1-n)};print a,b,b/a}'
100000000 90345024 0.90345

1000取3,取4
$ echo 1000 3 | awk '{a=b=1;for(n=1;n<=$2;n+=1){a*=$1;b*=($1-n)};print a,b,b/a}'
1000000000 994010994 0.994011
$ echo 1000 4 | awk '{a=b=1;for(n=1;n<=$2;n+=1){a*=$1;b*=($1-n)};print a,b,b/a}'
1000000000000 990034950024 0.990035

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
9 [报告]
发表于 2018-04-07 18:02 |只看该作者
回复 8# jason680

你现在是循环相乘自身字符串行数  肯定多很多
如果不相乘自身字符串  应该会少一大半左右


你不妨可以用20行来进行测试对比一下这两者行数比例相差多少(用不相乘自身字符串需求测试)

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
10 [报告]
发表于 2018-04-07 18:09 |只看该作者
本帖最后由 Windows19 于 2018-04-07 18:10 编辑

问题是这种算法的需求 估计很复杂,难度高 最后写不出来我才上来提问的希望大大们能够写出这种算法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP