有無更好的演算法來針對兩張表的項目編號比對進行處理 |
尚未結案
|
kaworu
一般會員 ![]() ![]() 發表:7 回覆:6 積分:2 註冊:2005-05-17 發送簡訊給我 |
標題可能有點模糊,這裡再完整的敘述一次
有兩張表,格式為
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 的第一筆; }我想的這個演算法是能正確處理問題,但就是太沒效率 因此想請教有沒有人有更佳的演算法來處理這樣的問題?謝謝 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |