C# - 갈루아 필드 GF(2) 연산
어려운 정의는 위키에 맡기고. ^^
유한체
; https://ko.wikipedia.org/wiki/유한체
현재 Finite Field(Galois field) 관련 코드는 .NET BCL에 포함되어 있지 않으므로 구현을 해야 합니다. 물론, ^^ 찾아보면 나옵니다.
https://github.com/hktaskin/FiniteFieldTools/blob/master/FiniteFieldArithmetics/FiniteFieldArithmetics.cs
https://github.com/hktaskin/FiniteFieldTools/blob/master/FiniteFieldArithmetics/MathTools.cs
위의 2개 파일과 함께 System.Numerics 어셈블리를 참조 추가하면 준비는 끝입니다.
컴퓨터에서 잘 다뤄지는 GF(2) 필드의 연산은 다음과 같은 결과를 보이는데요.
0 * 0 = 0
0 * 1 = 0
1 * 0 = 0
1 * 1 = 1
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0
FiniteFieldArithmetics.cs 파일에 정의된 FiniteField와 Polynomial 클래스를 이용해 다음과 같이 코드로 다룰 수 있습니다.
using System;
using FiniteFieldArithmetics;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
FiniteField GF2 = new FiniteField(2);
Polynomial one = new Polynomial(GF2, 1);
Console.WriteLine(one);
Polynomial zero = new Polynomial(GF2, 0);
Console.WriteLine(zero);
Console.WriteLine();
Console.WriteLine(zero * zero);
Console.WriteLine(zero * one);
Console.WriteLine(one * zero);
Console.WriteLine(one * one);
Console.WriteLine();
Console.WriteLine(zero + zero);
Console.WriteLine(zero + one);
Console.WriteLine(one + zero);
Console.WriteLine(one + one);
}
}
}
/* 출력 결과
1 over GF(2)
0 over GF(2)
0 over GF(2)
0 over GF(2)
0 over GF(2)
1 over GF(2)
0 over GF(2)
1 over GF(2)
1 over GF(2)
0 over GF(2)
*/
물론, GF(2) 연산 정도로 국한시킨다면 단순하게 *, + 연산 정도를 수행하는 클래스를 만들어 써도 좋겠지요. ^^
(
첨부 파일은 이 글의 예제 코드를 포함합니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]