Algoritmo de correspondência de seqüências Rabin Karp
Eu vi este algoritmo de correspondência de string Rabin Karp nos fóruns no site e estou interessado em tentar implementá-lo, mas eu queria saber se alguém poderia me dizer por que as variáveis ulong Q e ulong D são 100007 e 256 respectivamente: S ? Que significado esses valores carregam com eles?
<code>static void Main(string[] args) { string A = "String that contains a pattern."; string B = "pattern"; ulong siga = 0; ulong sigb = 0; ulong Q = 100007; ulong D = 256; for (int i = 0; i < B.Length; i++) { siga = (siga * D + (ulong)A[i]) % Q; sigb = (sigb * D + (ulong)B[i]) % Q; } if (siga == sigb) { Console.WriteLine(string.Format(">>{0}<<{1}", A.Substring(0, B.Length), A.Substring(B.Length))); return; } ulong pow = 1; for (int k = 1; k <= B.Length - 1; k++) pow = (pow * D) % Q; for (int j = 1; j <= A.Length - B.Length; j++) { siga = (siga + Q - pow * (ulong)A[j - 1] % Q) % Q; siga = (siga * D + (ulong)A[j + B.Length - 1]) % Q; if (siga == sigb) { if (A.Substring(j, B.Length) == B) { Console.WriteLine(string.Format("{0}>>{1}<<{2}", A.Substring(0, j), A.Substring(j, B.Length), A.Substring(j + B.Length))); return; } } } Console.WriteLine("Not copied!"); } </code>