algorithm – 使用DOS通配符强制执行字符串的最快方法
此问题类似于盲SQL注入.目标是确定字符串的确切值,您可以做的唯一测试是查看指定的DOS样式通配符(?=任何字符,* =任何数字的任何字符)是否与字符串匹配. (所以实际上你只能访问bool DoesWildcardMatch(字符串通配符)函数).
直接的方法是测试*,b *,c * ……直到找到第一个字母,然后重复.我能想到的一些优化: >搜索* a *,* b *等以确定字符集 解决方法
第一个念头.您可以在O(log2(n))中确定字符串的长度n.
>检查Z *,其中Z表示从0开始的k个问号,然后是1,然后每次检查将问号的数量加倍,直到不匹配为止. n必须在k / 2和k之间 知道确切的长度可能有助于在空间域中执行一种除法. UPDATE 如果知道长度,则可以使用相同的模式正确定位符号. 例: ..X. ..XX (spaces added for readability) + symbol may be X - symbol is not X X symbol is X *X* => MATCH ++++ ++++ *X* ???? => MATCH ++++ ++++ *X*?? ???? => NO MATCH --++ ++++ ??X? ???? => MATCH --X+ ++++ ??XX ???? => NO MATCH --X- ++++ ??X? *X*?? => NO MATCH --X- --++ ??X? ??X? => MATCH --X- --X+ ??X? ??XX => MATCH --X- --XX 对于字符串长度n和字母大小m,这将需要大约O(log2(n))来查找字符串的长度,大约O(n?log2(n))以正确放置n个符号,并且O(m)来查找使用的符号 – 总计得到的结果为O(n?log2(n)m). 我可以想象通过合并几个步骤可以加快速度 – 可以在确定字符串长度的同时测试用过的符号,或者在字符串的第一个和第二个半部分中同时定位两个(甚至更多?)符号.如果检查失败,这将需要单独重新检查合并的步骤,以确定哪个检查faild.但只要合并检查成功,您就可以获得两者的信息. 也许我会在明天计算一下,看看它是否会真正加快速度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows上的gtk.StatusIcon和gtk.Menu
- 在Windows 8和Windows Phone 8上使用带有HTML5 / Javascrip
- Windows 7 / Cygwin上的SSH定期无法解析主机名
- file-upload – 打开的文件似乎已被锁定,无法在Microsoft E
- 从Microsoft C读取RSP寄存器
- azure – 如何在没有用户交互的情况下授权服务使用Microsof
- windows-phone-7 – Windows Phone 7分辨率 – 我的模拟器对
- windows-server-2016 – 在Windows Server 2016上为用户锁定
- Windows – 组策略未在同一个doman上应用或被某些用户设定
- 窗口 – 是否有任何方式节制CPU /内存的进程?