- 帖子
- 2839
- 主題
- 10
- 精華
- 0
- 積分
- 2895
- 點名
- 0
- 作業系統
- 〔略〕
- 軟體版本
- 〔略〕
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 〔略〕
- 註冊時間
- 2013-5-13
- 最後登錄
- 2025-2-15
|
7#
發表於 2015-9-16 22:59
| 只看該作者
〔模糊比對〕,因有判斷式,大概一般都使用〔雙層迴圈〕,20000*20000=400000000,快不了!
要不,就要先將被比對文字〔拆分〕再納入〔字典檔〕,例如:1234 先拆成 1,2,3,4,12,23,34,123,234,1234,
以8個字元來說,每個編號要拆成36個:=(字元數+1)/2*字元數,
故第一個迴圈為:20000*36=720000,再加第二迴圈20000,共跑 740000,
但這又脫離正規解法,參考即可:(附檔有三種模式,可比較看看)
程式碼:- Sub 取數3()
- Dim i&, j&, Arr, Brr, Drr, T, SS, xD, xD1, TT$, M%, N%, Y$
- T = Timer
- [B:B].ClearContents: [H3:H4] = ""
- Arr = [A1].Resize(R): Brr = [B1].Resize(R): Drr = [D1].Resize(R)
- Set xD = CreateObject("Scripting.Dictionary")
- Set xD1 = CreateObject("Scripting.Dictionary")
- For j = 1 To UBound(Drr)
- TT = Drr(j, 1)
- M = Len(TT)
- N = 1
- xD1.RemoveAll
- Do
- For i = 1 To M
- Y = Mid(TT, N, i)
- If xD1(Y) = "" Then xD(Y) = xD(Y) + 1
- xD1(Y) = 1
- Next i
- N = N + 1: M = M - 1
- Loop Until M = 0
- Next j
-
- For i = 1 To UBound(Arr)
- Y = Arr(i, 1): j = xD(Y)
- Brr(i, 1) = j
- SS = SS + j
- Next i
-
- [B1].Resize(R) = Brr: [H3] = Timer - T: [H4] = SS
- End Sub
複製代碼
附檔下載:
模糊比對取數v01.rar (151.53 KB)
|
|