private static double ComputePathCost(List <QePatternInstance> l, char[] vPassword, EntropyEncoder ecPattern, MultiEntropyEncoder mcData) { ecPattern.Reset(); for (int i = 0; i < l.Count; ++i) { ecPattern.Write(l[i].PatternID); } double dblPatternCost = ecPattern.GetOutputSize(); mcData.Reset(); double dblDataCost = 0.0; foreach (QePatternInstance pi in l) { QeCharType tChar = pi.SingleCharType; if (tChar != null) { char ch = vPassword[pi.Position]; if (!mcData.Write(tChar.TypeID, ch)) { dblDataCost += pi.Cost; } } else { dblDataCost += pi.Cost; } } dblDataCost += mcData.GetOutputSize(); return(dblPatternCost + dblDataCost); }
private static void FindDiffSeqs(char[] vPassword, List <QePatternInstance>[] vPatterns) { int n = vPassword.Length; int d = int.MaxValue, p = 0; for (int i = 1; i <= n; ++i) { int dCur = ((i == n) ? int.MinValue : ((int)vPassword[i] - (int)vPassword[i - 1])); if (dCur != d) { if ((i - p) >= 3) // At least 3 chars involved { QeCharType ct = GetCharType(vPassword[p]); double dblCost = ct.CharSize + Log2(i - p - 1); vPatterns[p].Add(new QePatternInstance(p, i - p, PatternID.DiffSeq, dblCost)); } d = dCur; p = i - 1; } } }
private static void FindDiffSeqs(char[] vPassword, List <QePatternInstance>[] vPatterns) { int d = int.MinValue, p = 0; string str = new string(vPassword) + new string(char.MaxValue, 1); for (int i = 1; i < str.Length; ++i) { int dCur = (int)str[i] - (int)str[i - 1]; if (dCur != d) { if ((i - p) >= 3) // At least 3 chars involved { QeCharType ct = GetCharType(str[p]); double dblCost = ct.CharSize + Log2(i - p - 1); vPatterns[p].Add(new QePatternInstance(p, i - p, PatternID.DiffSeq, dblCost)); } d = dCur; p = i - 1; } } }
public QePatternInstance(int iPosition, int nLength, QeCharType ctSingle) { m_iPos = iPosition; m_nLen = nLength; m_chPatternID = ctSingle.TypeID; m_dblCost = ctSingle.CharSize; m_ctSingle = ctSingle; }
public QePatternInstance(int position, int length, QeCharType singleCharacter) { this.position = position; this.length = length; patternId = singleCharacter.TypeId; cost = singleCharacter.CharSize; singleCharacterType = singleCharacter; }
public QePatternInstance(int position, int length, char patternId, double cost) { this.position = position; this.length = length; this.patternId = patternId; this.cost = cost; singleCharacterType = null; }
public QePatternInstance(int iPosition, int nLength, char chPatternID, double dblCost) { m_iPos = iPosition; m_nLen = nLength; m_chPatternID = chPatternID; m_dblCost = dblCost; m_ctSingle = null; }