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); }
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); }
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]); }
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)); }
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)); } } }