public void VisitNode4Imp(int tabs, int pnvalue, List<int> pnIndexes) { //int occurCounter = 0; MakeEdgeVectorHashtable1(); Console.WriteLine("MakeEdgeVectorHashtable1() finished: " + DateTime.Now.ToString()); Stack<EdgeStruct> s = new Stack<EdgeStruct>(); //int[] rootOccurIndexes = new int[2] { -1, -1 }; OccurNode[] rootOccurSt = new OccurNode[1] { null }; int[] rootOccurLength = new int[1] { -1 }; List<Edge> edgeCol = Edge.FindAll1(stn); edgeCol.Sort(EdgeComparer); foreach (Edge e in edgeCol) { EdgeStruct es = new EdgeStruct(); es.e = e; es.tabs = 0; es.pnValue = 0; //es.pnOccurIndexes = rootOccurIndexes; es.pnOccurStart = rootOccurSt; es.pnOccurLength = rootOccurLength; s.Push(es); } edgeCol.Clear(); edgeCol = null; //int leafCounter = 0; while (s.Count != 0) { EdgeStruct es = s.Pop(); if (es.e.value != -1) // node has already been marked { es.e.st = es.occurStart[0]; es.e.len = es.occurLength[0]; //calculatePeriodCounter++; if (IsCalculatePeriod(es.e)) { CalculatePeriodImp(es.e); //CalculatePeriod2(es.e); } if (es.pnOccurStart[0] == null) { es.pnOccurStart[0] = es.occurStart[0]; es.pnOccurLength[0] = es.occurLength[0]; } else { occur.Sort(es.pnOccurStart, es.pnOccurLength[0], es.occurStart, es.occurLength[0]); es.pnOccurLength[0] += es.occurLength[0]; } } else // node has not been marked yet { int myval = 0; if (es.e.last_char_index == (N - 1)) // if it leads to a leaf { myval = N - ((es.e.last_char_index - es.e.first_char_index) + 1 + es.pnValue); occur.Add(myval, es.pnOccurStart, es.pnOccurLength); } else { myval = ((es.e.last_char_index - es.e.first_char_index) + 1 + es.pnValue); es.e.value = myval; //es.occurIndexes = new int[2]{-1,-1}; s.Push(es); stn = es.e.end_node; List<Edge> eCol = Edge.FindAll1(stn); eCol.Sort(EdgeComparer); foreach (Edge e in eCol) { EdgeStruct es1 = new EdgeStruct(); es1.e = e; es1.tabs = es.tabs + 1; es1.pnValue = es.e.value; es1.pnOccurStart = es.occurStart; es1.pnOccurLength = es.occurLength; //es1.pnOccurIndexes = es.occurIndexes; s.Push(es1); } eCol.Clear(); eCol = null; } } } }
public void MakeEdgeVectorHashtable1() { edht.Add(-1, 0); Stack <EdgeStruct> s = new Stack <EdgeStruct>(); //Dictionary<int, int> edht = new Dictionary<int, int>(); int eidCounter = 0; edht.Add(eidCounter++, 0); int stn = this.stn; List <Edge> edgeCol = Edge.FindAll1(stn); foreach (Edge e in edgeCol) { EdgeStruct es = new EdgeStruct(); es.e = e; es.pnIndexesIndex = 0; s.Push(es); } edgeCol.Clear(); edgeCol = null; while (s.Count != 0) { EdgeStruct es = s.Pop(); if (es.e.value != -1) // node has already been marked { edht[es.pnIndexesIndex] += edht[es.e.eid]; es.e.value = -1; // commented to keep it useful for visitNode4 } else // node has not been marked yet { //int myval = 0; if (es.e.last_char_index == (N - 1)) { edht[es.pnIndexesIndex]++; } else { es.e.value = 0;//myval; edht.Add(eidCounter, 0); es.e.eid = eidCounter++; s.Push(es); stn = es.e.end_node; List <Edge> eCol = Edge.FindAll1(stn); eCol.Sort(EdgeComparer); foreach (Edge e in eCol) { EdgeStruct es1 = new EdgeStruct(); es1.e = e; es1.pnIndexesIndex = es.e.eid; s.Push(es1); } eCol.Clear(); eCol = null; } } } /*long ccc = 0; * for (int i = 0; i < edht.Count; i++) * { * ccc += edht[i - 1]; * } * Console.WriteLine("CCC: " + ccc + "Time: " + DateTime.Now); */ }
public void MakeEdgeVectorHashtable1() { edht.Add(-1, 0); Stack<EdgeStruct> s = new Stack<EdgeStruct>(); //Dictionary<int, int> edht = new Dictionary<int, int>(); int eidCounter = 0; edht.Add(eidCounter++, 0); int stn = this.stn; List<Edge> edgeCol = Edge.FindAll1(stn); foreach (Edge e in edgeCol) { EdgeStruct es = new EdgeStruct(); es.e = e; es.pnIndexesIndex = 0; s.Push(es); } edgeCol.Clear(); edgeCol = null; while (s.Count != 0) { EdgeStruct es = s.Pop(); if (es.e.value != -1) // node has already been marked { edht[es.pnIndexesIndex] += edht[es.e.eid]; es.e.value = -1; // commented to keep it useful for visitNode4 } else // node has not been marked yet { //int myval = 0; if (es.e.last_char_index == (N - 1)) { edht[es.pnIndexesIndex]++; } else { es.e.value = 0;//myval; edht.Add(eidCounter, 0); es.e.eid = eidCounter++; s.Push(es); stn = es.e.end_node; List<Edge> eCol = Edge.FindAll1(stn); eCol.Sort(EdgeComparer); foreach (Edge e in eCol) { EdgeStruct es1 = new EdgeStruct(); es1.e = e; es1.pnIndexesIndex = es.e.eid; s.Push(es1); } eCol.Clear(); eCol = null; } } } /*long ccc = 0; for (int i = 0; i < edht.Count; i++) { ccc += edht[i - 1]; } Console.WriteLine("CCC: " + ccc + "Time: " + DateTime.Now); */ }
public void VisitNode4Imp(int tabs, int pnvalue, List <int> pnIndexes) { //int occurCounter = 0; MakeEdgeVectorHashtable1(); Console.WriteLine("MakeEdgeVectorHashtable1() finished: " + DateTime.Now.ToString()); Stack <EdgeStruct> s = new Stack <EdgeStruct>(); //int[] rootOccurIndexes = new int[2] { -1, -1 }; OccurNode[] rootOccurSt = new OccurNode[1] { null }; int[] rootOccurLength = new int[1] { -1 }; List <Edge> edgeCol = Edge.FindAll1(stn); edgeCol.Sort(EdgeComparer); foreach (Edge e in edgeCol) { EdgeStruct es = new EdgeStruct(); es.e = e; es.tabs = 0; es.pnValue = 0; //es.pnOccurIndexes = rootOccurIndexes; es.pnOccurStart = rootOccurSt; es.pnOccurLength = rootOccurLength; s.Push(es); } edgeCol.Clear(); edgeCol = null; //int leafCounter = 0; while (s.Count != 0) { EdgeStruct es = s.Pop(); if (es.e.value != -1) // node has already been marked { es.e.st = es.occurStart[0]; es.e.len = es.occurLength[0]; //calculatePeriodCounter++; if (IsCalculatePeriod(es.e)) { CalculatePeriodImp(es.e); //CalculatePeriod2(es.e); } if (es.pnOccurStart[0] == null) { es.pnOccurStart[0] = es.occurStart[0]; es.pnOccurLength[0] = es.occurLength[0]; } else { occur.Sort(es.pnOccurStart, es.pnOccurLength[0], es.occurStart, es.occurLength[0]); es.pnOccurLength[0] += es.occurLength[0]; } } else // node has not been marked yet { int myval = 0; if (es.e.last_char_index == (N - 1)) // if it leads to a leaf { myval = N - ((es.e.last_char_index - es.e.first_char_index) + 1 + es.pnValue); occur.Add(myval, es.pnOccurStart, es.pnOccurLength); } else { myval = ((es.e.last_char_index - es.e.first_char_index) + 1 + es.pnValue); es.e.value = myval; //es.occurIndexes = new int[2]{-1,-1}; s.Push(es); stn = es.e.end_node; List <Edge> eCol = Edge.FindAll1(stn); eCol.Sort(EdgeComparer); foreach (Edge e in eCol) { EdgeStruct es1 = new EdgeStruct(); es1.e = e; es1.tabs = es.tabs + 1; es1.pnValue = es.e.value; es1.pnOccurStart = es.occurStart; es1.pnOccurLength = es.occurLength; //es1.pnOccurIndexes = es.occurIndexes; s.Push(es1); } eCol.Clear(); eCol = null; } } } }