顯示具有 演算法 標籤的文章。 顯示所有文章
顯示具有 演算法 標籤的文章。 顯示所有文章

檢查是否有重複的演算法

把一些東西存在容器或是陣列裡頭,
然後想要一一比對裡面的東西是否有重複的,
通常最直覺的,是用雙迴圈(巢式)來處理。

比如說在一個容器裡,裝了 6 個物件:

object_length = 6;
for(i=0; i<object_length; i++) {
    objA = objAry[i];
    
    for(j=0; j<object_length; j++) {
        objB = objAry[j];
        
        if(objA == objB) {
            // 比對相同時, 處理的程序
        }
    }

}

上述作法總共需要執行 6 * 6 = 36 次的比對分析
存在二個問題
1. 應去除掉與自己比對 ?
2. i=1, j=2 比對完後,i=2, j=1 能否不要再比對

不需要與自己比對,所以程式可修正成如下:

object_length = 6;
for(i=0; i<object_length; i++) {
    objA = objAry[i];
    
    for(j=0; j<object_length; j++) {
        objB = objAry[j];
        
        if(i != j && objA == objB) {
            // 比對相同時, 處理的程序
        }
    }

}

如此一來, 我們已減掉了 6 次的與自己比對, 剩下 30 次的比對
底下是執行的結果
obj0 with obj1, obj2, obj3, obj4, obj5
obj1 with obj0, obj2, obj3, obj4, obj5
obj2 with obj0, obj1, obj3, obj4, obj5
obj3 with obj0, obj1, obj2, obj4, obj5
obj4 with obj0, obj1, obj2, obj3, obj5
obj5 with obj0, obj1, obj2, obj3, obj4

obj0 with obj1 跟 obj1 with obj0 是相同的結果,不需要再重複比對

我們所需要的結果應如下
obj0 with obj1, obj2, obj3, obj4, obj5
obj1 with obj2, obj3, obj4, obj5
obj2 with obj3, obj4, obj5
obj3 with obj4, obj5
obj4 with obj5
obj5 with nothing !!

所以最終的程式修改如下:

object_length = 6;
for(i=0; i<object_length-1; i++) {
    objA = objAry[i];
    
    for(j=i+1; j<object_length; j++) {
        objB = objAry[j];
        
        if(objA == objB) {
            // 比對相同時, 處理的程序
        }
    }

}

最後程式的比對運算只剩 15 次

程式語言編年史

程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...