QkNeighbors
QkNeighbors
struct QkNeighbors
결합 그래프의 인접 리스트 표현.
이는 로 qk_neighbors_from_target초기화됩니다.
이 객체는 C에서 읽기 전용입니다. 의 안전 보장을 qk_neighbors_clear충족시키기 위해서는, 가 초기화한 모든 데이터( qk_neighbors_from_target포인터로 가리키는 데이터 포함)를 덮어쓰지 않아야 합니다.
표현
에 의한 초기화 qk_neighbors_from_target 후, 구조체는 다음 두 모드 중 하나에 속하게 됩니다:
- 전원 간 연결성
- 제한된 2큐비트 연결성
모든-모든 경우에, 와 partition neighbors 포인터는 둘 다 null 포인터가 되며, num_qubits 는 내의 큐비트 개수가 QkTarget 됩니다. 이러한 객체들은 백킹 할당을 가지지 않으며, 할당될 필요가 qk_neighbors_clear 없습니다(비록 이 함수는 이 경우 안전한 무작위 작업이지만).
제한된 2큐비트 경우(실제 하드웨어에서는 훨씬 더 흔함)에서는 구조체 멤버의 해석에 대해 해당 멤버의 문서를 참조하십시오.
const uint32_t *neighbors
각 큐비트의 이웃을 나타내는 분할된 인접 리스트 표현. 이 포인터는 정확히 partition[num_qubits + 1] 회 읽기에 유효합니다.
양자비트 번호 i에 대한 인접 값들은 오프셋 partition[i] (포함)과 partition[i + 1] (제외) 사이의 값들이다. 이 두 오프셋 사이의 값들은 오름차순으로 정렬되어 있으며 중복이 없습니다.
const size_t *partition
필드가 neighbors 슬라이스로 분할되는 방식. 이 포인터는 정확히 num_qubits + 1 회 읽기에 유효합니다. 첫 번째 값은 항상 0이며, 값은 단조 증가합니다.
uint32_t num_qubits
큐비트의 수.
함수
qk_neighbors_is_all_to_all
bool qk_neighbors_is_all_to_all(const QkNeighbors *neighbors)
이 결합 그래프는 전-대-전 연결성을 나타내는가?
이는 와 partition 가 null neighbors 포인터임을 나타내므로, 어떤 읽기 작업에도 유효하지 않습니다.
안전
neighbors 유효하고 초기화된 QkNeighbors 객체를 가리켜야 합니다.
매개변수
- 이웃 – 결합 그래프.
리턴
그래프가 전수 연결성을 나타내는지 여부.
qk_neighbors_from_target
bool qk_neighbors_from_target(const QkTarget *target, QkNeighbors *neighbors)
객체를 QkNeighbors QkTarget초기화합니다.
대상에 다중 큐비트 게이트가 포함된 경우, 해당 게이트는 무시되며 연결성은 오직 2큐비트 결합 제약 조건만을 나타냅니다. 대상(target)이 전-대-전 연결성을 나타내는 경우, 함수는 null을 true반환하며 출력 포인터는 전-대-전 연결성 표현에 부합하도록 null 포인터로 초기화됩니다.
예
QkTarget *target = build_target_from_somewhere();
QkNeighbors neighbors;
if (qk_neighbors_from_target(target, &neighbors)) {
printf("All-to-all connectivity on &lu qubits.\n", neighbors.num_qubits);
return;
}
printf("Qubit 3 has %zu neighbors.\n", neighbors.partition[4] - neighbors.partition[3]);
printf("Those neighbors are: [");
for (size_t offset = neighbors.partition[3]; offset < neighbors.partition[4]; offset++) {
printf("%u%s",
neighbors.neighbors[offset],
offset + 1 == neighbors.partition[4] ? "" : ", ");
}
printf("]\n");
qk_neighbors_clear(&neighbors);안전
target 유효한 QkTarget 객체를 가리켜야 합니다. neighbors 정렬되어야 하며 안전하게 쓰기 가능해야 하지만, 초기화될 필요는 없습니다.
매개변수
- 대상 – 연결성을 읽을 대상.
- 이웃 –
QkNeighbors초기화할 객체.
리턴
모든 노드 간 연결성(all-to-all QkTarget connectivity)true을 나타내는지, 아니면 정규 연결성(regular connectivity)false을 가지는지 여부.
qk_neighbors_clear
void qk_neighbors_clear(QkNeighbors *neighbors)
객체 내의 모든 할당을 해제하십시오.
이 함수를 호출한 후, 객체는 QkNeighbors 모든 할당 위치에 null 포인터를 포함하게 되며, 마치 전-대-전 연결성을 나타내는 것처럼 보일 것입니다.
이것은 로 초기화된 객체에 QkNeighbors qk_neighbors_from_target대해서만 호출되어야 합니다.
안전
neighbors 유효하고 초기화된 QkNeighbors 객체를 가리켜야 하며, 해당 객체는 호출을 통해 초기화되었고 이후 qk_neighbors_from_target 변경되지 않아야 합니다.
매개변수
- neighbors – 객체에
QkNeighbors대한 포인터.