Many user are accessing the web-site with access pattern:
User 1 has access pattern : x->y->z->a->b->c->d->e->f
user 2 has access pattern : z->a->b->c->d
user 3 has access pattern : y->z->a->b->c->d
user 4 has access pattern : a->b->c->d
and list goes on for lot many users which are finite and numbered.
Now the question is can we determine the top 3 most occurring k-Page-sequence.
for the above example result will be : (k=3) a->b->c , b->c->d , z->a->b.
var GetFrequent(Hashtable t, List<List<Pages>> patterns, int k, int n)
{
for (int i = 0; i < patterns.Count; i++)
{
for (int j = 0; j < patterns[i].count-k+1; j++)
{
stringbuilder pages= string.empty();
for (int l = 0; l < k; l++)
pages += patterns[i][j+l];
t[pages]++;
}
}
var kvps = t.ToList();
kvps.sort(delegate (KeyValuePair<string, string> pair1, KeyValuePair<string, string> pair2)
{ return pair1.value.CompareTo(pair2.value); });
kvps.Reverse()
return kvps.Values.Range(0,n);
}
Given two integers k and n, write a function that prints all the sequences of length k composed of numbers 1,2..n. These sequences are to be printed in sorted order.
Input: k = 2, n = 3
Output:
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
void PrintSeqIterative(int n, int k)
{
var A = new List<int>(k){1};
while(True)
{
A.ForEach(x => Console.Write(x));
Console.WriteLine();
if (getSuccessor(arr, k,n) == 0)
break;
}
}
int getSuccessor(List<int> A, int k, int n)
{
int p = k-1;
while(p >= 0 && A[p] == n) p--;
if (p <0)
return 0;
A[p] = A[p] + 1;
for (int i = p+1; i < k; i++)
A[i] = 1;
return 1;
}
This can be made recursive as well.
User 1 has access pattern : x->y->z->a->b->c->d->e->f
user 2 has access pattern : z->a->b->c->d
user 3 has access pattern : y->z->a->b->c->d
user 4 has access pattern : a->b->c->d
and list goes on for lot many users which are finite and numbered.
Now the question is can we determine the top 3 most occurring k-Page-sequence.
for the above example result will be : (k=3) a->b->c , b->c->d , z->a->b.
var GetFrequent(Hashtable t, List<List<Pages>> patterns, int k, int n)
{
for (int i = 0; i < patterns.Count; i++)
{
for (int j = 0; j < patterns[i].count-k+1; j++)
{
stringbuilder pages= string.empty();
for (int l = 0; l < k; l++)
pages += patterns[i][j+l];
t[pages]++;
}
}
var kvps = t.ToList();
kvps.sort(delegate (KeyValuePair<string, string> pair1, KeyValuePair<string, string> pair2)
{ return pair1.value.CompareTo(pair2.value); });
kvps.Reverse()
return kvps.Values.Range(0,n);
}
Given two integers k and n, write a function that prints all the sequences of length k composed of numbers 1,2..n. These sequences are to be printed in sorted order.
Input: k = 2, n = 3
Output:
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
void PrintSeqIterative(int n, int k)
{
var A = new List<int>(k){1};
while(True)
{
A.ForEach(x => Console.Write(x));
Console.WriteLine();
if (getSuccessor(arr, k,n) == 0)
break;
}
}
int getSuccessor(List<int> A, int k, int n)
{
int p = k-1;
while(p >= 0 && A[p] == n) p--;
if (p <0)
return 0;
A[p] = A[p] + 1;
for (int i = p+1; i < k; i++)
A[i] = 1;
return 1;
}
This can be made recursive as well.
No comments:
Post a Comment