|
|
Re: 演算法
|
#1 |
发信站:
National Sun Yet San University
(m2.dj.net.tw>, 信区: BudaTech)
|
Heaven wrote:
>
> Shann 兄:
>
> > 这就是所谓 pattern matching 的想法. 我不清楚您的程式依据什麽算法写的.
> > 请找一本资料结构或演算法则的课本, 找一个称做 Knuth-Morris-Pratt 的算法.
>
> 昨天翻了一下家中的书 :) , 果然有看到这个演算法, 但和以前一样, 还是看不懂
> :<
>
> 不过, 那个是在一个长字串中找某一段短字串的技巧, 其实这方面我直接用 c 的函
> 数就搞定了.
>
> 後学的重点在於, 在二个长字串中, 如何判断那些部份是相同的,
> 那些部份是不同的,
> 我想大家都懂我的意思, 不过还是举例一下:
>
> 我爱大自然, 喜欢大自然, 您爱不爱?
> 我爱太白然, 喜欢大自然, 您爱不爱?
>
> 写的不好的程式, 有时会看成 (我的程式就会啦!)
>
> 我爱 大自然....
> 我爱太白然,喜欢大自然....
>
> 这些判断如何叫电脑做呢? 有什麽好规则?
>
> Heaven
可以考虑用辞库来作辅助.
--
------------------------------------------------------------------------
张文明
日月工作室
voice: 886-2-658-0270 (night)
mailto: dnstudio@m2.dj.net.tw 或 wmc@mozart.seed.net.tw
电子佛教藏经阁: http://w5.dj.net.tw/~DNStudio/canon 或
http://www.tyba.org.tw/canon
Fri May 16 12:50:16 1997
|
|
|
Re: 演算法
|
#2 |
发信站:
国立中山大学网路组 Mailing List
(mail.chinatrust.com.tw>, 信区: BudaTech)
|
> > 我爱大自然, 喜欢大自然, 您爱不爱?
> > 我爱太白然, 喜欢大自然, 您爱不爱?
> > 写的不好的程式, 有时会看成 (我的程式就会啦!)
> > A.我爱 大自然....
> > B.我爱太白然,喜欢大自然....
> > 这些判断如何叫电脑做呢? 有什麽好规则?
> 再多加个判断, 将 B.中的「太白然,喜欢」当成另一列待判断的字串, 而将
> A.中「大自」之後的「然,喜欢大自然...」与上述的「太白然,喜欢」做比较.
> 这样或许可以解决此类问题.
能否说详细一些, 後学不是很能弄清您的建议...
另外, 举个黄金□例, 供大家动脑
123456AB34甲乙EFG
甲乙丙丁AB34甲乙EFG
标准答案:
123456AB34甲乙EFG
甲乙丙丁 AB34甲乙EFG
错误1:(第一行找到二个相同的就对到第二行去)
12 3456AB34甲乙EFG
甲乙丙丁AB34 甲乙EFG
错误2:(第二行找到二个相同的就对到第一行去)
123456AB34甲乙 EFG
甲乙丙丁AB34甲乙EFG
您如何要电脑去判断上面的逻辑呢?
Heaven
Tue May 20 09:30:21 1997
|
|
|
Re: 演算法 |
#3 |
发信站:
国立中山大学网路组 Mailing List
(tpts1.seed.net.tw>, 信区: BudaTech)
|
Heaven wrote:
>
> 另外, 举个黄金□例, 供大家动脑
>
> 123456AB34甲乙EFG
> 甲乙丙丁AB34甲乙EFG
>
> 标准答案:
> 123456AB34甲乙EFG
> 甲乙丙丁 AB34甲乙EFG
>
> 错误1:(第一行找到二个相同的就对到第二行去)
> 12 3456AB34甲乙EFG
> 甲乙丙丁AB34 甲乙EFG
>
> 错误2:(第二行找到二个相同的就对到第一行去)
> 123456AB34甲乙 EFG
> 甲乙丙丁AB34甲乙EF□gt;
>
> 您如何要电脑去判断上面的逻辑呢?
好!让我这个不懂程式、不懂数学的人再来乱想一通,或
许可以激发大家的灵感。
先把这个黄金□例修改成这样:
□□□□□□□□□□□□□□□□□□□□□□□□□
字序 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
-------------------------
A档 1 2 3 4 5 6 A B 3 4 甲 乙 E F G
B档 甲 乙 丙 丁 A B 3 4 甲 乙 E F G
□□□□□□□□□□□□□□□□□□□□□□□□□
假设每次从A档抓一个字来跟B档比,且每次都从B档的
开头第一个字比起。
A档第01个字「1」在B档找不到,记录值∞。
A档第02个字「2」在B档找不到,记录值∞。
A档第03个字「3」在B档07找到,记录值 7。
A档第04个字「4」在B档08找到,记录值 8。
A档第05个字「5」在B档找不到,记录值∞。
A档第06个字「6」在B档找不到,记录值∞。
A档第07个字「A」在B档05找到,记录值 5。
A档第08个字「B」在B档06找到,记录值 6。
A档第09个字「3」在B档07找到,记录值 7。
A档第10个字「4」在B档08找到,记录值 8。
A档第11个字「甲」在B档01、09找到,记录值 1、 9。
A档第12个字「乙」在B档02、10找到,记录值 2、10。
A档第13个字「E」在B档11找到,记录值11。
A档第14个字「F」在B档12找到,记录值12。
A档第15个字「G」在B档13找到,记录值13。
从上面的观察,当A档第11、12字各产生两个记录值时,依据前
後连续性来考量,应当取记录值9跟10。
很显然的,A档第03、04字有连续记录值7、8,其记录值总和为
7+8=15。但A档从第07到15字皆有连续记录值,且当中亦包含记
录值7、8,而其开始连续的头两个(第07、08字)记录值总和为
5+6=11。
若考虑这两个发生连续记录值的区段,第二个区段的□围不但大
於第一个区段,而且包含第一个区段,所以应当放弃第一个区段。
再从记录值总和来看,第一个区段的两个记录值总和为7+8=15,
第二个区段头两个记录值总和为 5+6=11,因为15>11,所以应该
放弃第一个区段。
□□□□□□□□□□□□□□□□□
摩诃工作室.吴宝原
E-mail:maha@tpts1.seed.net.tw
Tel:(02)6741715/Fax:(02)6741716
□□□□□□□□□□□□□□□□□
Tue May 20 13:50:04 1997
|
|
|
Re: 演算法 |
#4 |
发信站:
国立中山大学网路组 Mailing List
(tpts1.seed.net.tw>, 信区: BudaTech)
|
Heaven wrote:
>
> 另外, 举个黄金□例, 供大家动脑
>
> 123456AB34甲乙EFG
> 甲乙丙丁AB34甲乙EFG
>
> 标准答案:
> 123456AB34甲乙EFG
> 甲乙丙丁 AB34甲乙EFG
>
> 错误1:(第一行找到二个相同的就对到第二行去)
> 12 3456AB34甲乙EFG
> 甲乙丙丁AB34 甲乙EFG
>
> 错误2:(第二行找到二个相同的就对到第一行去)
> 123456AB34甲乙 EFG
> 甲乙丙丁AB34甲乙EF□gt;
>
> 您如何要电脑去判断上面的逻辑呢?
好!让我这个不懂程式、不懂数学的人再来乱想一通,或
许可以激发大家的灵感。
先把这个黄金□例修改成这样:
□□□□□□□□□□□□□□□□□□□□□□□□□
字序 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
-------------------------
A档 1 2 3 4 5 6 A B 3 4 甲 乙 E F G
B档 甲 乙 丙 丁 A B 3 4 甲 乙 E F G
□□□□□□□□□□□□□□□□□□□□□□□□□
假设每次从A档抓一个字来跟B档比,且每次都从B档的
开头第一个字比起。
A档第01个字「1」在B档找不到,记录值∞。
A档第02个字「2」在B档找不到,记录值∞。
A档第03个字「3」在B档07找到,记录值 7。
A档第04个字「4」在B档08找到,记录值 8。
A档第05个字「5」在B档找不到,记录值∞。
A档第06个字「6」在B档找不到,记录值∞。
A档第07个字「A」在B档05找到,记录值 5。
A档第08个字「B」在B档06找到,记录值 6。
A档第09个字「3」在B档07找到,记录值 7。
A档第10个字「4」在B档08找到,记录值 8。
A档第11个字「甲」在B档01、09找到,记录值 1、 9。
A档第12个字「乙」在B档02、10找到,记录值 2、10。
A档第13个字「E」在B档11找到,记录值11。
A档第14个字「F」在B档12找到,记录值12。
A档第15个字「G」在B档13找到,记录值13。
从上面的观察,当A档第11、12字各产生两个记录值时,依据前
後连续性来考量,应当取记录值9跟10。
很显然的,A档第03、04字有连续记录值7、8,其记录值总和为
7+8=15。但A档从第07到15字皆有连续记录值,且当中亦包含记
录值7、8,而其开始连续的头两个(第07、08字)记录值总和为
5+6=11。
若考虑这两个发生连续记录值的区段,第二个区段的□围不但大
於第一个区段,而且包含第一个区段,所以应当放弃第一个区段。
再从记录值总和来看,第一个区段的两个记录值总和为7+8=15,
第二个区段头两个记录值总和为 5+6=11,因为15>11,所以应该
放弃第一个区段。
□□□□□□□□□□□□□□□□□
摩诃工作室.吴宝原
E-mail:maha@tpts1.seed.net.tw
Tel:(02)6741715/Fax:(02)6741716
□□□□□□□□□□□□□□□□□
Tue May 20 13:50:04 1997
|
|
|
Re: 演算法
|
#5 |
发信站:
国立中山大学网路组 Mailing List
(mail.chinatrust.com.tw>, 信区: BudaTech)
|
> > 我爱大自然, 喜欢大自然, 您爱不爱?
> > 我爱太白然, 喜欢大自然, 您爱不爱?
> > 写的不好的程式, 有时会看成 (我的程式就会啦!)
> > A.我爱 大自然....
> > B.我爱太白然,喜欢大自然....
> > 这些判断如何叫电脑做呢? 有什麽好规则?
> 再多加个判断, 将 B.中的「太白然,喜欢」当成另一列待判断的字串, 而将
> A.中「大自」之後的「然,喜欢大自然...」与上述的「太白然,喜欢」做比较.
> 这样或许可以解决此类问题.
能否说详细一些, 後学不是很能弄清您的建议...
另外, 举个黄金□例, 供大家动脑
123456AB34甲乙EFG
甲乙丙丁AB34甲乙EFG
标准答案:
123456AB34甲乙EFG
甲乙丙丁 AB34甲乙EFG
错误1:(第一行找到二个相同的就对到第二行去)
12 3456AB34甲乙EFG
甲乙丙丁AB34 甲乙EFG
错误2:(第二行找到二个相同的就对到第一行去)
123456AB34甲乙 EFG
甲乙丙丁AB34甲乙EFG
您如何要电脑去判断上面的逻辑呢?
Heaven
Tue May 20 09:30:21 1997
|
|
|
Re: 演算法 |
#6 |
白明弘
发信站:
狮子吼站
(Lion , 信区: BudaTech)
|
==> 於 ("Heaven") 文中述及:
: 能否说详细一些, 後学不是很能弄清您的建议...
: 另外, 举个黄金□例, 供大家动脑
: 123456AB34甲乙EFG
: 甲乙丙丁AB34甲乙EFG
: 标准答案:
: 123456AB34甲乙EFG
: 甲乙丙丁 AB34甲乙EFG
: 错误1:(第一行找到二个相同的就对到第二行去)
: 12 3456AB34甲乙EFG
: 甲乙丙丁AB34 甲乙EFG
: 错误2:(第二行找到二个相同的就对到第一行去)
: 123456AB34甲乙 EFG
: 甲乙丙丁AB34甲乙EFG
: 您如何要电脑去判断上面的逻辑呢?
小弟有找到两篇探讨这类问题的文章, 供师兄参考:
[1] "A File Comparison Program", by Webb Miller & Eugene W. Myers, from
SOFTWARE-PRACTICE AND EXPERIENCE, VOL. 15(11), 1025-1040(NOVEMBER 1985)
[2] "An O(ND) Difference Algorithm and Its Variations" by Eugene W. Myers,
from ALGORITHMICA (1986) VOL.1 pp.251-266
如果你在图书馆找不到的话, 小弟可以寄一分给你,
或是等小弟期末考完, k 他一 k, 再POST上来 ^_^
Wed Jun 18 15:05:38 1997
|
|
□ 台大狮子吼佛学专站 http://buddhaspace.org
| |