예제 #1
0
        public void GetHammingDistance_GivenTestStrings_ReturnsExpected()
        {
            // Arrange
            const string STRING1 = "this is a test";
            const string STRING2 = "wokka wokka!!!";

            // Act
            var result = _calc.GetHammingDistance(STRING1, STRING2);

            // Assert
            result.Should().Be(37);
        }
예제 #2
0
        private int GetNormalisedDistance(byte[] data, int keysize)
        {
            // TODO:
            //You could proceed perhaps with the smallest 2-3 KEYSIZE values.
            //Or take 4 KEYSIZE blocks instead of 2 and average the distances.

            //For each KEYSIZE, take the first KEYSIZE worth of bytes,
            // and the second KEYSIZE worth of bytes
            List <byte[]> chunks = GetChunks(data, keysize).Take(4).ToList();

            // and find the edit distance between them.
            var editDistance1 = _hammingDistance.GetHammingDistance(chunks[0], chunks[1]);
            var editDistance2 = _hammingDistance.GetHammingDistance(chunks[0], chunks[2]);
            var editDistance3 = _hammingDistance.GetHammingDistance(chunks[0], chunks[3]);

            var editDistance4 = _hammingDistance.GetHammingDistance(chunks[1], chunks[0]);
            var editDistance5 = _hammingDistance.GetHammingDistance(chunks[1], chunks[2]);
            var editDistance6 = _hammingDistance.GetHammingDistance(chunks[1], chunks[3]);


            var editDistance7 = _hammingDistance.GetHammingDistance(chunks[2], chunks[0]);
            var editDistance8 = _hammingDistance.GetHammingDistance(chunks[2], chunks[1]);
            var editDistance9 = _hammingDistance.GetHammingDistance(chunks[2], chunks[3]);

            var editDistance10 = _hammingDistance.GetHammingDistance(chunks[3], chunks[0]);
            var editDistance11 = _hammingDistance.GetHammingDistance(chunks[3], chunks[1]);
            var editDistance12 = _hammingDistance.GetHammingDistance(chunks[3], chunks[2]);



            var sum = editDistance1 + editDistance2 + editDistance3 + editDistance4 + editDistance5 + editDistance6 +
                      editDistance7 + editDistance8 + editDistance9 + editDistance10 + editDistance11
                      + editDistance12;

            return((sum / 12) / keysize);

            // Normalize this result by dividing by KEYSIZE.
            //return (editDistance1 / keysize);
        }