Skip to main content
IBM Quantum Platform

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 대한 포인터.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.