全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1596
推到 Plurk!
推到 Facebook!

有無更好的演算法來針對兩張表的項目編號比對進行處理

尚未結案
kaworu
一般會員


發表:7
回覆:6
積分:2
註冊:2005-05-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-26 02:18:22 IP:203.73.xxx.xxx 未訂閱
標題可能有點模糊,這裡再完整的敘述一次 有兩張表,格式為
Table 1
Num1 DATAa DATEb ...
1    x     y
2    x     y
3    x     y
4    x     y
...    Table 2
Num2 DATAa DATEb ...
1    x     y
2    x     y
3    x     y
5    x     y
...
表格內的 Data 不重要 所要做的事是比對兩張表的資料項目 若編號相符(此即為 1、2、3),則進行 Process A 若編號在 Table 1 中有,但 Table 2 中沒有(此即為 4),則進行 Process B 若編號在 Table 2 中有,但 Table 1 中沒有(此即為 5),則進行 Process C 比對過程一次只能取一個項目,且無法隨機存取,只能從重頭開始一筆一筆取出 例如 Table 1 第一次只能拿到 ( 1, x, y ),第二次只能拿到 ( 2, x, y ),依序拿到最後一筆 Table 2 亦同。 目前我想到的演算法只是最基本的雙層迴圈,且做兩次......如下:
boolean matched; /*用來判斷目前所持編號是否在另一張表上也出現過了*/    while( index1 != EOF ){
        matched = false;
        get dataRow1;
        
        while( index2 != EOF ){
                get dataRow2;
                
                if( num1 == num2 ){
                        do Process A;
                        matched = true;
                }
                index2 指向下一筆;
        }
        if( matched == false )
                do Process B;
        
        index1 指向下一筆;
        index2 指回 Table 2 的第一筆;
}
/*至目前為止,還無法判斷出要處理 Process C 的情況,所以下面反過來又做一次*/
while( index2 != EOF ){
        matched = false;
        get dataRow2;
        
        while( index1 != EOF ){
                get dataRow1;
                
                if( num2 == num1 )
                        matched = true;                    index1 指向下一筆;
        }
        if( matched == false )
                do Process C;
        
        index2 指向下一筆;
        index1 指回 Table 1 的第一筆;
}
我想的這個演算法是能正確處理問題,但就是太沒效率 因此想請教有沒有人有更佳的演算法來處理這樣的問題?謝謝
系統時間:2024-05-06 7:20:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!