ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: ldy

[Excel 程序开发] [第40期]字符串的DNA 已结

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-10-24 17:53 | 显示全部楼层
QUOTE:
以下是引用ldy在2008-10-23 19:11:00的发言:

想到了一个更加 好的方法 可以不用按照取前15位 的做法,减少第二种方法的错误概率10倍。

13楼附件中的getDNA过程中两处地方 小改一下

 Dim DNA As Double, DNAS As String * 15    改为  Dim DNA As Double, DNAS As String

 DNAS = DNA                                改为  DNAS = Log(DNA)

如此一改 DNAS 的结果 像这样 "4.42151540977897" 最长15位数字(不含小数点)

其出错的概率 为 1/10^15 , 10 兆分之一 ,如果不是刻意去计算的话,这辈子估计是碰不上的了。

d

只要存在运气的问题,就存在冒险

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-10-24 20:26 | 显示全部楼层
QUOTE:
以下是引用zldccmx在2008-10-23 23:18:00的发言:

哈哈,宁可错杀一千,也不放过一个! 不怕一万,就怕万一哦!

老朽以为,不能以几率论,哪怕是兆兆兆兆...........分之一,都是不可取的!

老朽是个循规蹈矩的人,所以对这种冒险做法不太认同!

因为,一旦错了就有可能造成无法挽回的损失!

老朽觉得,学术如此,生活更是如此! [em05][em05]

 

{54A55BDC-3E27-4E96-A62A-E50C9597E7FB} 这样的东西看着眼熟吧,每一个程序都有这么一个 GUID
 

这个东西也是有重复几率的1/16^32 ,就是兆兆兆兆......分之一,整个电脑系统都是在这样的几率下运行。  

呵呵,抬抬杠,知道了这种情况,你是不是不用电脑了?。

to  HHMMAA

CHR(1) ,确实有点抬杠,log(1)=0

如果仅有这一个的话,可以用 DNA = DNA + (Log(Abs(Asc(Mid(s, j, 1)) + 0.1))) 处理 并不影响效率

还能找到其他的错误吗?呵呵,抬杠的也行。

某伟人说过 抬杠使人进步

[此贴子已经被作者于2008-10-24 20:31:56编辑过]

TA的精华主题

TA的得分主题

发表于 2008-12-3 08:40 | 显示全部楼层
好久不来了,谢谢ldy版主帮我"挡箭" 哈。
不过自己的确汗颜,此题作法显然有点"偷鸡"了.

用log 就是为了rescale,取精度舍数量级,如果用相乘,平方,立方很容易
导致overflow,简单的log变换后之和相等就相当于每套字符串asc的质数集合
相同,这样的例子有很多。 以2位字符串为例:
(log(32)+log(48)) = (log(24)+log(64))=(log(12)+log(128)) ........
当然有很多都是“乱码“。

TA的精华主题

TA的得分主题

发表于 2009-6-25 19:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册


!!!!

TA的精华主题

TA的得分主题

发表于 2012-11-15 14:33 | 显示全部楼层
xiangchendub 发表于 2008-9-30 15:29
答案已发送,跟帖占位。Left(sc, 15)  这个用的好,答题者中最快,由于本期题目属于火锅奖,再额外加分 ...

For Each elmt In arr
    For i = 1 To Len(elmt)
        sc = sc + Log(Abs(Asc(Mid(elmt, i, 1))))'这句什么意思,我没看懂哟
    Next
        If Not ds.exists(Left(sc, 15)) Then
        ds(Left(sc, 15)) = elmt
    Else
        ds(Left(sc, 15)) = ds(Left(sc, 15)) & " " & elmt
    End If
   
    sc = 0
Next

TA的精华主题

TA的得分主题

发表于 2014-4-25 17:44 | 显示全部楼层
ldy 发表于 2008-10-23 00:59
QUOTE:适逢国庆,这次的题目较简单,属于送分的题目。QUOTE:普通的提取重复值,加了一些变化,打乱了字符顺 ...

第二种怎么能算方法?
“AB” 和"7N" 的所谓 DNA是相同的

TA的精华主题

TA的得分主题

发表于 2020-3-18 09:30 | 显示全部楼层
不再有更好的方法了么,大神们该出手了

TA的精华主题

TA的得分主题

发表于 2021-8-6 19:41 | 显示全部楼层
关于第二个方法我觉得可以再加个判断,字典中log值一样的话  还可以追加字符是否包含,完全一致一定包含一个字符,不一致纯粹log值一致的话*10就可以作为key值写入可能性就更少了吧
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 19:11 , Processed in 0.040441 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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