Microsoft MVP성태의 닷넷 이야기
Math: 16. C# - 갈루아 필드 GF(2) 연산 [링크 복사], [링크+제목 복사],
조회: 34578
글쓴 사람
정성태 (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분
정성태

... 31  32  33  34  35  36  37  38  39  40  41  42  43  [44]  45  ...
NoWriterDateCnt.TitleFile(s)
12955정성태2/4/202219236개발 환경 구성: 635. 비주얼 스튜디오에서 실행하던 ASP.NET Core (.NET Framework) 응용 프로그램을 명령행에서 실행하는 방법 (2)
12954정성태2/4/202217246VS.NET IDE: 173. 비주얼 스튜디오 - Output 창에 색상이 지정된 출력 결과가 "[39m[22m" 식의 문자로 나오는 문제
12953정성태2/2/202218666Linux: 48. Windows 11 + WSL 우분투 GUI 환경에서 한글 출력
12952정성태2/2/202220247.NET Framework: 1148. C# - ffmpeg(FFmpeg.AutoGen)를 이용한 오디오 필터 예제(filter_audio.c)파일 다운로드1
12951정성태2/2/202218530.NET Framework: 1147. C# - ffmpeg(FFmpeg.AutoGen)를 이용한 오디오 필터링 예제(filtering_audio.c)파일 다운로드1
12950정성태2/1/202220347.NET Framework: 1146. .NET 6에 추가되지 않은 Generic Math (예: INumber<T>)
12949정성태2/1/202219363.NET Framework: 1145. C# - ffmpeg(FFmpeg.AutoGen) - Codec 정보 열람 및 사용 준비파일 다운로드1
12948정성태1/30/202220123.NET Framework: 1144. C# - ffmpeg(FFmpeg.AutoGen) AVFormatContext를 이용해 ffprobe처럼 정보 출력파일 다운로드1
12947정성태1/30/202219948개발 환경 구성: 634. ffmpeg.exe - 기존 동영상 컨테이너에 다중 스트림을 추가하는 방법
12946정성태1/28/202220394오류 유형: 792. .NET Core - 로컬 개발 중에 docker 호스팅으로 바꾸는 경우 SQL 서버 접근 방법
12945정성태1/28/202220656오류 유형: 791. SQL 서버 로그인 시 localhost는 되고, 127.0.0.1로는 안 되는 문제
12944정성태1/28/202223840.NET Framework: 1143. C# - Entity Framework Core 6 개요
12943정성태1/27/202223602.NET Framework: 1142. .NET 5+로 포팅 시 플랫폼 호환성 경고 메시지(SYSLIB0006, SYSLIB0011, CA1416) [1]파일 다운로드1
12942정성태1/27/202221887.NET Framework: 1141. XmlSerializer와 Dictionary 타입파일 다운로드1
12941정성태1/26/202222800오류 유형: 790. AKS/k8s - pod 상태가 Pending으로 지속되는 경우
12940정성태1/26/202218254오류 유형: 789. AKS에서 hpa에 따른 autoscale 기능이 동작하지 않는다면?
12939정성태1/25/202221390.NET Framework: 1140. C# - ffmpeg(FFmpeg.AutoGen)를 이용해 MP3 오디오 파일 인코딩/디코딩하는 예제 [1]파일 다운로드1
12938정성태1/24/202224641개발 환경 구성: 633. Docker Desktop + k8s 환경에서 local 이미지를 사용하는 방법
12937정성태1/24/202222277.NET Framework: 1139. C# - ffmpeg(FFmpeg.AutoGen)를 이용해 오디오(mp2) 인코딩하는 예제(encode_audio.c) [2]파일 다운로드1
12936정성태1/22/202220535.NET Framework: 1138. C# - ffmpeg(FFmpeg.AutoGen)를 이용해 멀티미디어 파일의 메타데이터를 보여주는 예제(metadata.c)파일 다운로드1
12935정성태1/22/202222725.NET Framework: 1137. ffmpeg의 파일 해시 예제(ffhash.c)를 C#으로 포팅파일 다운로드1
12934정성태1/22/202221482오류 유형: 788. Warning C6262 Function uses '65564' bytes of stack: exceeds /analyze:stacksize '16384'. Consider moving some data to heap. [2]
12933정성태1/21/202222383.NET Framework: 1136. C# - ffmpeg(FFmpeg.AutoGen)를 이용해 MP2 오디오 파일 디코딩 예제(decode_audio.c)파일 다운로드1
12932정성태1/20/202224326.NET Framework: 1135. C# - ffmpeg(FFmpeg.AutoGen)로 하드웨어 가속기를 이용한 비디오 디코딩 예제(hw_decode.c) [2]파일 다운로드1
12931정성태1/20/202219731개발 환경 구성: 632. ASP.NET Core 프로젝트를 AKS/k8s에 올리는 과정
12930정성태1/19/202219597개발 환경 구성: 631. AKS/k8s의 Volume에 파일 복사하는 방법
... 31  32  33  34  35  36  37  38  39  40  41  42  43  [44]  45  ...