Q#

덤프버전 :

더위키의 기술적인 문제로 인해 이 문서로 오는 링크를 만들 때는 다음과 같이 입력해야 합니다. 자세한 내용은 이 문서를 참고해 주십시오.
[[Q\\#]] 또는 [[Q##]] 또는 [[Q#]]


'''이론 컴퓨터 과학
{{{#fff

Theoretical Computer Science
'''

[ 펼치기 · 접기 ]
이론
기본 대상
수학기초론(수리논리학(논리 연산) · 계산 가능성 이론 · 범주론 · 집합론) · 이산수학(그래프 이론) · 수치해석학 · 확률론통계학] · 선형대수학
다루는 대상과 주요 토픽
계산 가능성 이론
재귀함수 · 튜링 기계 · 람다 대수 · 처치-튜링 명제 · 바쁜 비버
오토마타 이론
FSM · 푸시다운 · 튜링 머신(폰노이만 구조) · 정규 표현식 · 콘웨이의 생명 게임
계산 복잡도 이론
점근 표기법 · 튜링 기계^고전, PRAM, 양자, 비결정론적^ · 알고리즘 · 자료구조 · 알고리즘 패러다임(그리디 알고리즘, 동적 계획법)
수학적 최적화
조합 최적화
외판원 순회 문제 · 담금질 기법 · 유전 알고리즘 · 기계학습
볼록 최적화
내부점 방법 · 경사하강법
선형계획법
심플렉스법
정보이론
데이터 압축(무손실 압축 포맷 · 손실 압축 포맷) · 채널 코딩(채널 용량) · 알고리즘 정보 이론(AIT) · 양자정보과학
컴퓨팅 방법론
병렬 컴퓨팅(병렬 아키텍처 · 암달의 법칙 · 병렬 알고리즘) · 분산 컴퓨팅(분산 알고리즘 · 클러스터 컴퓨팅 · 그리드 컴퓨팅 · 클라우드 컴퓨팅) · 멀티코어 컴퓨팅 · 대칭형 다중 처리(SMP)
암호학
해시(MD5 · 암호화폐 · 사전 공격(레인보우 테이블) · SHA) · 양자 암호
대칭키 암호화 방식
블록 암호 알고리즘(AES · ARIA · LEA · Camellia) · 스트림 암호 알고리즘(RC4)
공개키 암호화 방식
공개키 암호 알고리즘(타원 곡선 암호 · RSA) · 신원 기반 암호 알고리즘(SM9)
프로그래밍 언어이론
프로그래밍 언어(함수형 언어 · 객체 지향 프로그래밍) · 메타 프로그래밍 · 형식언어 · 유형 이론 · 프로그래밍 언어 의미론 · 컴파일러 이론
주요 알고리즘 및 자료구조
기초
정렬 알고리즘 · 순서도 · 탐색 알고리즘
추상적 자료형 및 구현
배열^벡터^ · 리스트^연결 리스트^ · 셋(set)^레드-블랙 트리, B-트리^ · 우선순위 큐^, 피보나치 힙^
계산 수론 및 암호학
밀러-라빈 소수판별법 · Pollard-rho 알고리즘 · 쇼어 알고리즘 · LLL 알고리즘
계산기하학
볼록 껍질 · 들로네 삼각분할 및 보로노이 도형^Fortune의 line-sweeping 알고리즘^ · 범위 탐색^vp-tree, R-tree^ · k-NN
그래프 이론
탐색^BFS, DFS, 다익스트라 알고리즘, A* 알고리즘^ · 에드몬드-카프 · 크루스칼 알고리즘 · 위상 정렬 · 네트워크 이론
정리
정지 문제대각선 논법 · 암달의 법칙 · P-NP 문제미해결 · 콜라츠 추측미해결
틀:이산수학 · 틀:수학기초론 · 틀:컴퓨터공학




파일:Microsoft 로고.svg

[ 펼치기 · 접기 ]

||<-2><tablebgcolor=#FFFFFF,#1F2023><bgcolor=#888888,#2D2F34><tablewidth=100%> 산하 계열사 및 사업부 ||
||<-2><width=100%> GitHub · .NET Foundation · Xbox Game Studios · LinkedIn ||
||<-2><bgcolor=#888888,#2D2F34><width=100%> 제품군 ||
||<bgcolor=#888888,#2D2F34><width=15%> 하드웨어 ||Surface · Xbox · HoloLens · PixelSense · Zune ||
||<bgcolor=#888888,#2D2F34> 소프트웨어 ||Windows · Office · Edge · Hyper-V · MS-DOS · Groove 음악 · Microsoft Defender · Visual Studio Code · Visual Studio · Windows Terminal · Microsoft PowerToys · Internet Explorer · Windows Media Player · Windows Movie Maker ||
||<bgcolor=#888888,#2D2F34> 서비스 ||Microsoft Azure · OneDrive · Skype · MSN · Bing · LinkedIn · 코타나 · 테이 · Xbox Live · 정품 인증 · MSDN ||
||<bgcolor=#888888,#2D2F34> 관련 기술 ||Windows 커널 · Windows 디자인 · ASF · 블레이저 · DirectX · FAT · NTFS · ReFS · MFC · .NET · COM · DCOM · OLE · ActiveX · ASP · Universal Windows Platform · WASAPI · WMA · WMV · Windows API · Windows Runtime · Xamarin · XNA · Silverlight ||
||<-2><bgcolor=#888888,#2D2F34><width=100%> 관련 인물 ||
||<-2><width=100%> 빌 게이츠(은퇴) · 폴 앨런(은퇴) · 스티브 발머(퇴사) · 게이브 뉴웰(퇴사) · 사티아 나델라 · 필 스펜서 ||




프로그래밍 사이트 선정 프로그래밍 언어 순위 목록

⠀[ TIOBE 2023 ]⠀
2023년 2월 기준 검색어 점유율 상위 20개 프로그래밍 언어
1
Python
11
Go
2
C
12
R
3
C++
13
MATLAB
4
Java
14
Delphi / Object Pascal
5
C#
15
Swift
6
Visual Basic .NET
16
Ruby
7
JavaScript
17
Perl
8
SQL
18
Scratch
9
어셈블리어
19
Classic Visual Basic
10
PHP
20
Rust

[ 21위 ~ 50위 펼치기 · 접기 ]
21
SAS
36
Logo
22
Visual FoxPro
37
Dart
23
Ada
38
RPG
24
Fortran
39
Haskell
25
LISP
40
Bash
26
Lua
41
CFML
27
Transact-SQL
42
Prolog
28
Objective-C
43
TypeScript
29
F#
44
Scheme
30
COBOL
45
PowerShell
31
Groovy
46
Awk
32
PL/SQL
47
ABAP
33
Kotlin
48
Emacs Lisp
34
Julia
49
ML
35
Scala
50
D


프로그래밍 언어 목록 · 분류 · 문법


1. 개요
2. 역사
3. 기능
4. 특징
4.1. C\#와의 비교
4.2. F\#와의 비교
5. 예제
5.1. 난수 생성기
5.2. 그래프 색 지정 문제
6. 관련 문서
7. 외부 링크


1. 개요[편집]


Q#은 2017년에 발표된 양자컴퓨터의 양자 알고리즘을 개발하고 실행하기 위한 Microsoft의 오픈 소스 프로그래밍 언어이다.


2. 역사[편집]


2017년 9월 26일 Microsoft Ignite Keynote에서 Microsoft양자 컴퓨터를 위해 특별히 설계된 새로운 프로그래밍 언어를 출시할 것이라고 발표했다. 2017년 12월 11일에는 Microsoft는 .NET 프로젝트의 SDK인 Quantum Development Kit(QDK)의 일부로 Q#을 출시했다. 이후 Build 2019빌드에서 Microsoft는 Q# 컴파일러와 시뮬레이터를 포함한 Quantum Development Kit를 오픈소싱한다고 발표했다.

3. 기능[편집]


Q#의 주요 기능은 양자 알고리즘용 큐비트를 만들고 사용하는 기능이다. 결과적으로 Q#의 가장 두드러진 기능 중 일부는 각각 Controlled NOT 게이트 및 Hadamard 게이트를 통해 큐비트에 중첩 및 중첩제어를 도입 하는 기능과 Tofffoli Gates , Pauli X, Y, Z 게이트 등을 포함하는 기능이다.

결국 Q#과 함께 제공될 하드웨어 스택은 큐비트를 토폴로지 큐비트로 구현할 것으로 예상된다. 현재 Quantum Development Kit와 함께 제공되는 양자 시뮬레이터는 사용자 컴퓨터에서 최대 32큐비트를 처리하고 Azure에서는 최대 40큐비트를 처리할 수 있다.


Quantum Development Kit에서 제공하는 기능들은 다음과 같다.
  • Azure Quantum 서비스에 Qiskit[1] 및 Cirq 애플리케이션을 제출하는 Python 패키지
  • Q# 프로그래밍 언어 및 라이브러리
  • Jupyter Notebook에서 Q#을 실행하기 위한 IQ# 커널
  • Azure Quantum 서비스를 관리하고 Q# 애플리케이션을 제출하는 Azure CLI 확장
  • Q#을 포함하여 Python 및 .NET 언어용(C\#, F\#VB.NET) API
  • Visual Studio CodeVisual Studio용 확장


4. 특징[편집]



4.1. C\#와의 비교[편집]





4.2. F\#와의 비교[편집]



  • 변수는 let또는 mutable을 사용하여 선언
  • 1차 함수
  • open키워드를 사용하여 모듈 가져오기
  • 데이터 유형은 변수 이름 뒤에 선언
  • 범위 연산자 ..
  • for … in루프
  • 모든 작업/함수는 void가 아닌 빈 튜플 반환
  • 레코드 데이터 유형의 정의 (type대신 newtype 키워드 사용)

5. 예제[편집]



5.1. 난수 생성기[편집]


이 예제는 Microsoft의 공식 문서 중 연습-양자 난수 생성기 만들기에서 가져왔습니다.

namespace QuantumRNG { open Microsoft.Quantum.Canon; open Microsoft.Quantum.Intrinsic; open Microsoft.Quantum.Measurement; open Microsoft.Quantum.Math; open Microsoft.Quantum.Convert; operation GenerateRandomBit() : Result { // Allocate a qubit. use q = Qubit(); // Put the qubit to superposition. H(q); // It now has a 50% chance of being measured 0 or 1. // Measure the qubit value. return M(q); } operation SampleRandomNumberInRange(max : Int) : Int { mutable output = 0; repeat { mutable bits = []; for idxBit in 1..BitSizeI(max) { set bits += [GenerateRandomBit()]; } set output = ResultArrayAsInt(bits); } until (output <= max); return output; } @EntryPoint() operation SampleRandomNumber() : Int { let max = 50; Message($"Sampling a random number between 0 and {max}: "); return SampleRandomNumberInRange(max); } }


5.2. 그래프 색 지정 문제[편집]


이 예제는 Microsoft의 공식 문서 중 연습 - Grover 알고리즘을 구현하여 그래프 색 지정 문제 해결에서 가져왔습니다.

namespace ExploringGroversSearchAlgorithm { open Microsoft.Quantum.Measurement; open Microsoft.Quantum.Math; open Microsoft.Quantum.Arrays; open Microsoft.Quantum.Canon; open Microsoft.Quantum.Convert; open Microsoft.Quantum.Diagnostics; open Microsoft.Quantum.Intrinsic; operation MarkColorEquality(c0 : Qubit[], c1 : Qubit[], target : Qubit) : Unit is Adj+Ctl { within { for (q0, q1) in Zipped(c0, c1) { CNOT(q0, q1); } } apply { (ControlledOnInt(0, X))(c1, target); } } operation MarkValidVertexColoring( edges : (Int, Int)[], colorsRegister : Qubit[], target : Qubit ) : Unit is Adj+Ctl { let nEdges = Length(edges); let colors = Chunks(2, colorsRegister); use conflictQubits = Qubit[nEdges]; within { for ((start, end), conflictQubit) in Zipped(edges, conflictQubits) { MarkColorEquality(colors[start], colors[end], conflictQubit); } } apply { (ControlledOnInt(0, X))(conflictQubits, target); } } operation ApplyMarkingOracleAsPhaseOracle( markingOracle : ((Qubit[], Qubit) => Unit is Adj), register : Qubit[] ) : Unit is Adj { use target = Qubit(); within { X(target); H(target); } apply { markingOracle(register, target); } } operation RunGroversSearch(register : Qubit[], phaseOracle : ((Qubit[]) => Unit is Adj), iterations : Int) : Unit { ApplyToEach(H, register); for _ in 1 .. iterations { phaseOracle(register); within { ApplyToEachA(H, register); ApplyToEachA(X, register); } apply { Controlled Z(Most(register), Tail(register)); } } } @EntryPoint() operation SolveGraphColoringProblem() : Unit { // Graph description: hardcoded from the example. let nVertices = 5; let edges = [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3), (3, 4)]; // Define the oracle that implements this graph coloring. let markingOracle = MarkValidVertexColoring(edges, _, _); let phaseOracle = ApplyMarkingOracleAsPhaseOracle(markingOracle, _); // Define the parameters of the search. // Each color is described using 2 bits (or qubits). let nQubits = 2 * nVertices; // The search space is all bit strings of length nQubits. let searchSpaceSize = 2 ^ (nQubits); // The number of solutions is the number of permutations of 4 colors (over the first four vertices) = 4! // multiplied by 3 colors that vertex 4 can take in each case. let nSolutions = 72; // The number of iterations can be computed using a formula. let nIterations = Round(PI() / 4.0 * Sqrt(IntAsDouble(searchSpaceSize) / IntAsDouble(nSolutions))); mutable answer = new Bool[nQubits]; use (register, output) = (Qubit[nQubits], Qubit()); mutable isCorrect = false; repeat { RunGroversSearch(register, phaseOracle, nIterations); let res = MultiM(register); // Check whether the result is correct. markingOracle(register, output); if (MResetZ(output) == One) { set isCorrect = true; set answer = ResultArrayAsBoolArray(res); } ResetAll(register); } until (isCorrect); // Convert the answer to readable format (actual graph coloring). let colorBits = Chunks(2, answer); Message("The resulting graph coloring:"); for i in 0 .. nVertices - 1 { Message($"Vertex {i} - color {BoolArrayAsInt(colorBits[i])}"); } } }

6. 관련 문서[편집]



7. 외부 링크[편집]



파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-02 12:56:39에 나무위키 Q# 문서에서 가져왔습니다.

[1] IBM에서 개발한 Python 기반 양자컴퓨팅 언어이다.