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

... 91  92  93  94  95  96  97  98  99  100  [101]  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11523정성태5/15/201826676.NET Framework: 749. C# - 값 형식의 readonly 인스턴스에 대한 메서드 호출 시 defensive copy 발생 [1]파일 다운로드1
11522정성태5/15/201825067개발 환경 구성: 378. Azure - VM 진단 설정 화면의 "This subscription is not registered with the Microsoft.Insights resource provider."
11521정성태5/15/201822381개발 환경 구성: 377. Azure - 원하는 성능 데이터로 모니터링 대시보드 구성
11520정성태5/12/201825142.NET Framework: 748. C# 7.1 - 참조 어셈블리(Ref Assemblies)
11519정성태5/12/201827537개발 환경 구성: 376. ASP.NET Web Application 프로젝트의 FileSystem 배포(Publish) 시 Before/After Task 설정 방법 [1]
11518정성태5/10/201825671.NET Framework: 747. C# 7.0에서도 부분적으로 가능해진 "타입 추론을 통한 튜플의 변수명 자동 지정"
11517정성태5/10/201823060.NET Framework: 746. Azure runbook 예제 - 6시간 동안 수행 중인 VM을 중지 [1]파일 다운로드1
11516정성태5/9/201824438.NET Framework: 745. Azure runbook을 PowerShell 또는 C# 코드로 실행하는 방법파일 다운로드1
11515정성태5/9/201827284.NET Framework: 744. C# 6 - Expression bodied function [1]
11514정성태5/3/201825121오류 유형: 466. Bitvise - Error in component session/transport/kexHandler [2]
11513정성태5/3/201833710.NET Framework: 743. C# 언어의 공변성과 반공변성 [9]파일 다운로드2
11512정성태5/2/201824446개발 환경 구성: 375. Azure runbook 실행 시 "Errors", "All Logs"에 오류 메시지가 출력되는 경우
11511정성태5/2/201824997개발 환경 구성: 374. Azure - Runbook 기능 소개
11510정성태4/30/201826380.NET Framework: 742. windbg로 확인하는 Finalizer를 가진 객체의 GC 과정파일 다운로드1
11509정성태4/28/201823575.NET Framework: 741. windbg로 확인하는 객체의 GC 여부
11508정성태4/23/201826263개발 환경 구성: 373. MSBuild를 이용해 프로젝트 배포 후 결과물을 zip 파일로 압축하는 방법파일 다운로드1
11507정성태4/20/201827821개발 환경 구성: 372. MSBuild - 빌드 전/후, 배포 전/후 실행하고 싶은 Task 정의
11506정성태4/20/201831346.NET Framework: 740. C#에서 enum을 boxing 없이 int로 변환하기 - 두 번째 이야기 [7]파일 다운로드1
11505정성태4/19/201824432개발 환경 구성: 371. Azure Web App 확장 예제 - Simple WebSite Extension
11504정성태4/19/201826028오류 유형: 465. Azure Web App 확장 - Extplorer File manager 적용 시 오류
11503정성태4/19/201824086오류 유형: 464. PowerShell - Start-Service 명령 오류 (Service 'xxx' cannot be started)
11502정성태4/17/201827043개발 환경 구성: 370. Azure VM/App Services(Web Apps)에 Let's Encrypt 무료 인증서 적용 방법 [3]
11501정성태4/17/201825157개발 환경 구성: 369. New-AzureRmADServicePrincipal로 생성한 계정의 clientSecret, key 값을 구하는 방법파일 다운로드1
11500정성태4/17/201826015개발 환경 구성: 368. PowerShell로 접근하는 Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11499정성태4/17/201823610개발 환경 구성: 367. Azure - New-AzureRmADServicePrincipal / New-AzureRmRoleAssignment 명령어
11498정성태4/17/201823739개발 환경 구성: 366. Azure Active Directory(Microsoft Enfra ID)의 사용자 유형 구분 - Guest/Member
... 91  92  93  94  95  96  97  98  99  100  [101]  102  103  104  105  ...