Esempio n. 1
0
        public static void UpdateKeyCloudColl <T>(List <T> objKeyList, KeyBondColl <T, T> objKeyCloudColl, int nRadiusSize = 7)
        {
            OffsetWeightMDL objHeadWeightMDL = new  OffsetWeightMDL(1, 1);
            OffsetWeightMDL objTailWeightMDL = new  OffsetWeightMDL(1, 1);

            UpdateKeyCloudColl <T>(objKeyList, objKeyCloudColl, objHeadWeightMDL, objTailWeightMDL, nRadiusSize);
        }
Esempio n. 2
0
        public static KeyItemMDL <T> UpdateKeyItemColl <T>(T key, KeyItemColl <T> objKeyItemColl, OffsetWeightMDL objWeightMDL)
        {
            if (!objKeyItemColl.Contains(key))
            {
                KeyItemMDL <T> item = new KeyItemMDL <T>();
                item.Key          = key;
                item.UpdateOffset = objKeyItemColl.Parameter.TotalOffset;
                objKeyItemColl.Add(item);
            }


            KeyItemMDL <T> mdl = objKeyItemColl[key];

            mdl.ValidCount   = objWeightMDL.Weight + mdl.ValidCount * MemoryDAL.CalcRemeberValue(objKeyItemColl.Parameter.TotalOffset - mdl.UpdateOffset, objKeyItemColl.Parameter);
            mdl.TotalCount   = objWeightMDL.Weight + mdl.TotalCount * MemoryDAL.CalcRemeberValue(objWeightMDL.Weight, objKeyItemColl.Parameter);
            mdl.UpdateOffset = objKeyItemColl.Parameter.TotalOffset;

            objKeyItemColl.Parameter.TotalValidCount = objWeightMDL.Weight + objKeyItemColl.Parameter.TotalValidCount * MemoryDAL.CalcRemeberValue(objWeightMDL.Offset, objKeyItemColl.Parameter);
            objKeyItemColl.Parameter.TotalOffset    += objWeightMDL.Offset;

            return(mdl);
        }
Esempio n. 3
0
        public static KeyBondMDL <T, L> UpdateKeyBondColl <T, L>(T head, L tail, KeyBondColl <T, L> objKeyBondColl, OffsetWeightMDL objHeadWeightMDL, OffsetWeightMDL objTailWeightMDL)
        {
            if (!objKeyBondColl.Contains(head))
            {
                KeyBondMDL <T, L> bond = new KeyBondMDL <T, L>();
                bond.KeyItem.Key                      = head;
                bond.KeyItem.UpdateOffset             = objKeyBondColl.Parameter.TotalOffset;
                bond.LinkColl.Parameter.ContainerSize = objKeyBondColl.Parameter.ContainerSize;
                bond.LinkColl.Parameter.Threshold     = objKeyBondColl.Parameter.Threshold;
                objKeyBondColl.Add(bond);
            }

            KeyItemMDL <T> mdl = objKeyBondColl[head].KeyItem;

            mdl.ValidCount   = objHeadWeightMDL.Weight + mdl.ValidCount * MemoryDAL.CalcRemeberValue(objKeyBondColl.Parameter.TotalOffset - mdl.UpdateOffset, objKeyBondColl.Parameter);
            mdl.TotalCount   = objHeadWeightMDL.Weight + mdl.TotalCount * MemoryDAL.CalcRemeberValue(1, objKeyBondColl.Parameter);
            mdl.UpdateOffset = objKeyBondColl.Parameter.TotalOffset;


            KeyItemColl <L> objLinkColl = objKeyBondColl[head].LinkColl;

            if (objTailWeightMDL.Offset < 0)
            {
                //继承主计数
                objLinkColl.Parameter.TotalOffset = objKeyBondColl.Parameter.TotalOffset;
                objTailWeightMDL.Offset           = 0;
            }
            KeyItemDAL.UpdateKeyItemColl(tail, objLinkColl, objTailWeightMDL);

            objKeyBondColl.Parameter.TotalValidCount = objHeadWeightMDL.Weight + objKeyBondColl.Parameter.TotalValidCount * MemoryDAL.CalcRemeberValue(objHeadWeightMDL.Offset, objKeyBondColl.Parameter);
            objKeyBondColl.Parameter.TotalOffset    += objHeadWeightMDL.Offset;

            return(objKeyBondColl[head]);
        }
Esempio n. 4
0
        public static KeyItemMDL <L> UpdateTailBondColl <T, L>(T head, L tail, KeyBondColl <T, L> objKeyBondColl, OffsetWeightMDL objTailWeightMDL)
        {
            if (!objKeyBondColl.Contains(head))
            {
                return(null);
            }


            KeyItemColl <L> objLinkColl = objKeyBondColl[head].LinkColl;

            if (objTailWeightMDL.Offset < 0)
            {
                //继承主计数
                objLinkColl.Parameter.TotalOffset = objKeyBondColl.Parameter.TotalOffset;
                objTailWeightMDL.Offset           = 0;
            }
            return(KeyItemDAL.UpdateKeyItemColl(tail, objLinkColl, objTailWeightMDL));
        }
Esempio n. 5
0
        public static void UpdateKeyCloudColl <T>(List <T> objKeyList, KeyBondColl <T, T> objKeyCloudColl, OffsetWeightMDL objHeadWeightMDL, OffsetWeightMDL objTailWeightMDL, int nRadiusSize = 7)
        {
            Dictionary <int, KeyValuePair <int, double> > objRelateDict = new Dictionary <int, KeyValuePair <int, double> >();

            for (int k = 0; k < objKeyList.Count; k++)
            {
                objRelateDict.Add(k, new KeyValuePair <int, double>(k, -1));
                T keyTail = objKeyList[k];
                for (int r = 1; r <= Math.Min(k, nRadiusSize); r++)
                {
                    int    nPos         = k - r;
                    T      keyHead      = objKeyList[nPos];
                    double dRelateValue = KeyBondHelper.CalcBondRelateValue <T>(keyHead, keyTail, objKeyCloudColl);
                    if (dRelateValue > objRelateDict[k].Value)
                    {
                        objRelateDict[k] = new KeyValuePair <int, double>(nPos, dRelateValue);
                    }
                    if (dRelateValue > objRelateDict[nPos].Value)
                    {
                        objRelateDict[nPos] = new KeyValuePair <int, double>(k, dRelateValue);
                    }
                }
                if (k > nRadiusSize)
                {
                    int nPos     = k - nRadiusSize - 1;
                    int nCorePos = nPos;
                    int nLinkPos = objRelateDict[nPos].Key;


                    if (nCorePos > nLinkPos)
                    {
                        nCorePos = nLinkPos;
                        nLinkPos = nPos;
                    }
                    lock (objKeyCloudColl)
                    {
                        KeyBondDAL.UpdateKeyBondColl <T, T>(objKeyList[nCorePos], objKeyList[nLinkPos], objKeyCloudColl, objHeadWeightMDL, objTailWeightMDL);
                    }

                    objRelateDict.Remove(nPos);
                }
            }
            foreach (KeyValuePair <int, KeyValuePair <int, double> > pair in objRelateDict)
            {
                int nPos     = pair.Key;
                int nCorePos = nPos;
                int nLinkPos = objRelateDict[nPos].Key;
                if (nCorePos > nLinkPos)
                {
                    nCorePos = nLinkPos;
                    nLinkPos = nPos;
                }
                lock (objKeyCloudColl)
                {
                    KeyBondDAL.UpdateKeyBondColl <T, T>(objKeyList[nCorePos], objKeyList[nLinkPos], objKeyCloudColl, new OffsetWeightMDL(1, 1), new OffsetWeightMDL(1, 1));
                }
            }
        }