Microsoft MVP성태의 닷넷 이야기
Math: 16. C# - 갈루아 필드 GF(2) 연산 [링크 복사], [링크+제목 복사],
조회: 29088
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)

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) 연산 정도로 국한시킨다면 단순하게 *, + 연산 정도를 수행하는 클래스를 만들어 써도 좋겠지요. ^^

(첨부 파일은 이 글의 예제 코드를 포함합니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 5/19/2016]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2016-05-20 03시38분
[spowner] 왜 관련 정보를 찾으셨고 정리해서 기록했는지 궁금합니다~
[guest]
2016-05-24 04시32분
이제서야 덧글 쓸 준비가 되었습니다. ^^ 다음의 글을 참고하세요.

C# - Lights Out 퍼즐 풀기
; http://www.sysnet.pe.kr/2/0/10981
정성태
2016-05-27 10시59분
정성태

... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13323정성태4/16/202313674개발 환경 구성: 677. Octave에서 Excel read/write를 위한 io 패키지 설치
13322정성태4/15/202315250VS.NET IDE: 182. Visual Studio - 32비트로만 빌드된 ActiveX와 작업해야 한다면?
13321정성태4/14/202313013개발 환경 구성: 676. WSL/Linux Octave - Python 스크립트 연동
13320정성태4/13/202312738개발 환경 구성: 675. Windows Octave 8.1.0 - Python 스크립트 연동
13319정성태4/12/202313741개발 환경 구성: 674. WSL 2 환경에서 GNU Octave 설치
13318정성태4/11/202313370개발 환경 구성: 673. JetBrains IDE에서 "Squash Commits..." 메뉴가 비활성화된 경우
13317정성태4/11/202313820오류 유형: 855. WSL 2 Ubuntu 20.04 - error: cannot communicate with server: Post http://localhost/v2/snaps/...
13316정성태4/10/202311313오류 유형: 854. docker-compose 시 "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)" 오류 발생
13315정성태4/10/202313096Windows: 245. Win32 - 시간 만료를 갖는 컨텍스트 메뉴와 윈도우 메시지의 영역별 정의파일 다운로드1
13314정성태4/9/202313888개발 환경 구성: 672. DosBox를 이용한 Turbo C, Windows 3.1 설치 [1]
13313정성태4/9/202313368개발 환경 구성: 671. Hyper-V VM에 Turbo C 2.0 설치 [2]
13312정성태4/8/202312690Windows: 244. Win32 - 시간 만료를 갖는 MessageBox 대화창 구현 (개선된 버전)파일 다운로드1
13311정성태4/7/202314259C/C++: 163. Visual Studio 2022 - DirectShow 예제 컴파일(WAV Dest)
13310정성태4/6/202313219C/C++: 162. Visual Studio - /NODEFAULTLIB 옵션 설정 후 수동으로 추가해야 할 library
13309정성태4/5/202314103.NET Framework: 2107. .NET 6+ FileStream의 구조 변화
13308정성태4/4/202314176스크립트: 47. 파이썬의 time.time() 실숫값을 GoLang / C#에서 사용하는 방법 [1]
13307정성태4/4/202312836.NET Framework: 2106. C# - .NET Core/5+ 환경의 Windows Forms 응용 프로그램에서 HINSTANCE 구하는 방법
13306정성태4/3/202313055Windows: 243. Win32 - 윈도우(cbWndExtra) 및 윈도우 클래스(cbClsExtra) 저장소 사용 방법
13305정성태4/1/202314504Windows: 242. Win32 - 시간 만료를 갖는 MessageBox 대화창 구현 (쉬운 버전) [1]파일 다운로드1
13304정성태3/31/202314772VS.NET IDE: 181. Visual Studio - C/C++ 프로젝트에 application manifest 적용하는 방법
13303정성태3/30/202312757Windows: 241. 환경 변수 %PATH%에 DLL을 찾는 규칙
13302정성태3/30/202313813Windows: 240. RDP 환경에서 바뀌는 %TEMP% 디렉터리 경로
13301정성태3/29/202314249Windows: 239. C/C++ - Windows 10 Version 1607부터 지원하는 /DEPENDENTLOADFLAG 옵션 [1]파일 다운로드1
13300정성태3/28/202313539Windows: 238. Win32 - Modal UI 창에 올바른 Owner(HWND)를 설정해야 하는 이유
13299정성태3/27/202313405Windows: 237. Win32 - 모든 메시지 루프를 탈출하는 WM_QUIT 메시지
13298정성태3/27/202312846Windows: 236. Win32 - MessageBeep 소리가 안 들린다면?
... 16  17  18  19  20  21  22  23  24  25  [26]  27  28  29  30  ...