PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
eric625
Senior Member
 

加入日期: Jun 2001
您的住址: 台灣
文章: 1,212
感謝您的心得分享!
引用:
作者songmong12
丟固定位元到陣列裡面,針對兩個陣列下去比對....然後標記

這只是想法.....作法當然是.....自己想

這一篇可以請大家看看

程式人員的面試心得及基本原則 (http://piratechu.pixnet.net/blog/post/1891437)

     
      
__________________
回饋小黃卡號 34923092
舊 2009-06-25, 07:39 PM #11
回應時引用此文章
eric625離線中  
atpqq
Amateur Member
 

加入日期: Dec 2003
您的住址: 家
文章: 39
使用雲端運算去比對大量資料,速度會不錯唷^^
 
舊 2009-06-25, 08:08 PM #12
回應時引用此文章
atpqq離線中  
阿宅
*停權中*
 
阿宅的大頭照
 

加入日期: Dec 2006
您的住址: 大鵰村
文章: 12
我覺得根本沒有更好的方法
因為不一樣字元出現的機率沒有規則
所以時間複雜度都是..O(n)...

如果實作的話...
1.看Windows有沒有提供API...(我記得是有)
會快一點

2.取兩字串中m個字元的CRC(須考慮m與CRC重複機率的問題,其他方法也可以,就是求出m個字元的特徵值)之類的
然後檢查是否相等
如果相等代表該m個字元相同
不相等就找出來
重複上步驟直到完成...

警告!!
本回應是嘴砲文
認真思考會腦殘


此文章於 2009-06-25 08:15 PM 被 阿宅 編輯.
舊 2009-06-25, 08:11 PM #13
回應時引用此文章
阿宅離線中  
ivantw
Junior Member
 
ivantw的大頭照
 

加入日期: May 2005
您的住址: Autobahn, Deutschland
文章: 743
在 Form 上拉出 CommandButton x1 (Command1)、ListBox x2 (List1, List2)
此範例 Form Load 時亂數產生兩個字串,故設定的長度越長將影響 Form Load 時間。
請根據你的需求修改成符合適合你的狀況。

兩字串長度為4096,有100處不同時。
在Pentium-M 2.23G, DDRII 533 2GB, 915GM 主機上執行:
純比對:1ms 以內完成
輸出至ListBox:14~17ms完成
輸出至ListBox+Debug:90~95ms完成

備註:計算比對其實很快,你要注意的是輸出的方式!

Pos S1 S2
9 --> q [71] Y [59]
124 --> : [3A] ] [5D]
227 --> f [66] U [55]
236 --> 4 [34] < [3C]
260 --> F [46] A [41]
285 --> X [58] 5 [35]
369 --> { [7B] s [73]
458 --> D [44] _ [5F]
509 --> W [57] K [4B]
596 --> i [69] z [7A]
613 --> b [62] S [53]
646 --> I [49] b [62]
721 --> 4 [34] x [78]
749 --> D [44] P [50]
776 --> } [7D] q [71]
779 --> d [64] 1 [31]
904 --> Z [5A] g [67]
920 --> m [6D] | [7C]
922 --> < [3C] 3 [33]
928 --> K [4B] { [7B]
953 --> | [7C] u [75]
982 --> v [76] ; [3B]
1051 --> 4 [34] T [54]
1101 --> 5 [35] 2 [32]
1134 --> : [3A] Z [5A]
1162 --> R [52] 5 [35]
1245 --> I [49] S [53]
1279 --> i [69] L [4C]
1285 --> v [76] ^ [5E]
1318 --> z [7A] G [47]
1349 --> 3 [33] } [7D]
1433 --> g [67] i [69]
1435 --> m [6D] [ [5B]
1440 --> D [44] T [54]
1537 --> \ [5C] c [63]
1594 --> U [55] p [70]
1644 --> z [7A] a [61]
1670 --> f [66] @ [40]
1678 --> ` [60] = [3D]
1715 --> 4 [34] w [77]
1799 --> C [43] X [58]
1814 --> h [68] d [64]
1827 --> K [4B] I [49]
1873 --> V [56] L [4C]
1936 --> ] [5D] < [3C]
1943 --> B [42] W [57]
2040 --> b [62] L [4C]
2111 --> G [47] J [4A]
2164 --> ~ [7E]  [7F]
2183 --> 8 [38] l [6C]
2197 --> x [78] h [68]
2223 --> M [4D] E [45]
2306 --> z [7A] ^ [5E]
2332 --> = [3D] x [78]
2390 --> K [4B] P [50]
2462 --> R [52] ~ [7E]
2488 --> T [54] X [58]
2515 --> r [72] R [52]
2531 --> _ [5F] X [58]
2621 --> 2 [32] E [45]
2635 --> h [68] q [71]
2658 --> L [4C] a [61]
2744 --> @ [40] ~ [7E]
2745 --> @ [40] B [42]
2764 --> 7 [37] z [7A]
2798 --> Q [51] O [4F]
2884 --> l [6C] T [54]
2894 --> 4 [34]  [7F]
2896 --> V [56] y [79]
2947 --> u [75] l [6C]
2977 --> X [58] 2 [32]
2984 --> [ [5B] ? [3F]
3034 --> < [3C] p [70]
3207 --> T [54] 3 [33]
3227 --> f [66] r [72]
3235 --> I [49] S [53]
3242 --> L [4C] ; [3B]
3243 --> F [46] u [75]
3273 --> | [7C] f [66]
3286 --> } [7D] N [4E]
3287 --> A [41] c [63]
3393 --> k [6B] J [4A]
3485 --> ? [3F] N [4E]
3515 -->  [7F] 3 [33]
3556 --> @ [40] < [3C]
3557 --> ^ [5E] 8 [38]
3583 --> c [63] s [73]
3597 --> R [52] W [57]
3633 --> f [66] 8 [38]
3660 --> g [67] 0 [30]
3687 --> M [4D] 7 [37]
3708 --> r [72] z [7A]
3730 --> p [70] : [3A]
3772 --> ~ [7E] ` [60]
3904 --> _ [5F] 7 [37]
3923 --> 5 [35] : [3A]
3982 --> < [3C] P [50]
4025 --> n [6E] 4 [34]
4083 --> M [4D] y [79]

Time Cost:94ms







代碼:
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Sub RtlMoveMemory Lib "kernel32" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private s1 As String
Private s2 As String
Private sLen As Long

Private t1 As Long
Private t2 As Long


Private Sub Command1_Click()
        Dim bCx As Long
        Dim b1() As Byte
        Dim b2() As Byte
        Dim export As String
        
        List2.Clear
        
        t1 = GetTickCount
        
        
        ReDim b1(1 To sLen)
        ReDim b2(1 To sLen)
        
        RtlMoveMemory b1(1), ByVal s1, sLen
        RtlMoveMemory b2(1), ByVal s2, sLen
        
        Debug.Print "Pos", "S1", "S2"
        For bCx = 1 To sLen
            If b1(bCx) <> b2(bCx) Then
               export = bCx & " --> " & Chr(b1(bCx)) & " [" & Hex(b1(bCx)) & "]" & "   " & Chr(b2(bCx)) & " [" & Hex(b2(bCx)) & "]"
               List2.AddItem (export)
               Debug.Print export
            End If
        Next bCx
        
        t2 = GetTickCount
        
        
        Debug.Print
        Debug.Print "Time Cost:" & (t2 - t1) & "ms"
End Sub

Private Sub Form_Load()
        Dim tCx As Long
        Dim tPos As Long
        
        sLen = 4096
        
        s1 = vbNullString
        s2 = vbNullString
        
        For tCx = 1 To sLen
            s1 = s1 & Chr(Int(Rnd() * 80) + 48)
        Next tCx
        s2 = s1
        
        For tCx = 1 To 100
            tPos = Int(Rnd() * sLen) + 1
            List1.AddItem (tPos)
            Debug.Print tPos
            
            Mid(s2, tPos, 1) = Chr(Int(Rnd() * 80) + 48)
        Next tCx
End Sub
舊 2009-06-25, 10:47 PM #14
回應時引用此文章
ivantw離線中  
影 子
*停權中*
 
影 子的大頭照
 

加入日期: Aug 2004
文章: 317
引用:
作者ivantw
在 Form 上拉出 CommandButton x1 (Command1)、ListBox x2 (List1, List2)
此範例 Form Load 時亂數產生兩個字串,故設定的長度越長將影響 Form Load 時間。
請根據你的需求修改成符合適合你的狀況。

兩字串長度為4096,有100處不同時。
在Pentium-M 2.23G, DDRII 533 2GB, 915GM 主機上執行:
純比對:1ms 以內完成
輸出至ListBox:14~17ms完成
輸出至ListBox+Debug:90~95ms完成

備註:計算比對其實很快,你要注意的是輸出的方式!

Pos S1 S2
9 --> q [71] Y [59]
124 --> : [3A] ] [5D]
227 --> f [66] U [55]
236 --> 4 [34] < [3C]
260 --> F [46] A [41]
285 --> X [58] 5 [35]
369 --> { [7B] s [73]
458 --> D [44] _ [5F]
509 --> W [57] K [4B]
596 --> i [69] z [7A]
613 --> b [62] ...

感謝你的程式碼
輸出這點小弟沒考慮到
謝謝
舊 2009-06-25, 11:10 PM #15
回應時引用此文章
影 子離線中  
caozhibai
*停權中*
 

加入日期: Apr 2009
文章: 52
VB6 是啥?記得好像是很久、很久、很久、很久、很久、很久以前的程序,現在的學校與社會脫節這麼嚴重?
舊 2009-06-25, 11:33 PM #16
回應時引用此文章
caozhibai離線中  
ivantw
Junior Member
 
ivantw的大頭照
 

加入日期: May 2005
您的住址: Autobahn, Deutschland
文章: 743
說古老...VB6也不過是1998年的產品,比這還古老卻更耐命甚至淘汰不了的東西可是一堆啊!如:Informix。
別看VB6簡單、古老就嫌棄它,許多企業內部還是一堆VS6系列開發的軟體,也很難去淘汰。看來你跟社會也是脫節的蠻嚴重的!

引用:
作者caozhibai
VB6 是啥?記得好像是很久、很久、很久、很久、很久、很久以前的程序,現在的學校與社會脫節這麼嚴重?
舊 2009-06-25, 11:50 PM #17
回應時引用此文章
ivantw離線中  
ivantw
Junior Member
 
ivantw的大頭照
 

加入日期: May 2005
您的住址: Autobahn, Deutschland
文章: 743
我也很久沒寫VB6的程式了,藉你這個例子,剛好來個溫習∼
方便的話,能就你現有的程式以及我張貼的程式碼對相同的字串條件來個效能比較嗎?


引用:
作者影 子
感謝你的程式碼
輸出這點小弟沒考慮到
謝謝

此文章於 2009-06-25 11:56 PM 被 ivantw 編輯.
舊 2009-06-25, 11:55 PM #18
回應時引用此文章
ivantw離線中  
stardog
Senior Member
 
stardog的大頭照
 

加入日期: Feb 2002
文章: 1,172
一定要用vb6的話 大概只能迴圈了

建議還是用.net多執行緒會快很多

尤其是這種純比對的部份

另外建議 不要一比對完畢有值就丟出來

最好是一樣開一個string收起來到一定的數量再顯示出來

因為這樣會造成 程式先去計算然後再Call UI thread

然後又出來計算 又回去Call UI thread

另外我覺得多執行緒需要考慮的倒不是怎麼切分 而是順序不要弄錯了

雖然說理論上先開的thread會先完成 但是...也很難說

所以....最好是丟進去之前自己先編好變數順序

結果出來之後一次結合顯示

反正vb又不太需要管記憶體 反正變數設下去就衝啦

快睡著了 所以Code你自己加油吧
舊 2009-06-26, 01:08 AM #19
回應時引用此文章
stardog離線中  
supermaxfight
Golden Member
 
supermaxfight的大頭照
 

加入日期: Jun 2002
您的住址: 地獄18層
文章: 3,273
樓主算不錯了

我現在連程式人員的面試心得及基本原則裡面的
1-2+3-4+5-6+7......+n
用VB還寫不出來
__________________
徵你不要的AM4 CPU
徵你不要的SATA接頭斷裂SSD
舊 2009-06-26, 01:15 AM #20
回應時引用此文章
supermaxfight離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是08:58 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。