В соответствии с методом подсчета простейших операций алгоритм представляется в виде программы на развитом языке программирования (например, Pascal). Определяется множество простейших операций высокого уровня, которые не зависят от языка программирования. К таким операциям относятся:
- присваивание переменной значения,
- вызов метода (процедуры или функции),
- выполнение арифметической операции,
- сравнение двух значений,
- индексация массива,
- переход по ссылке на объект,
- возвращение из метода.
Симулятор квантовой трассировки: счетчик простейших операций
Счетчик примитивной операции является частью симулятора квантовойQuantum Development Kit трассировки. Он подсчитывает количество простейших процессов, которые используются каждой операцией, вызываемой в квантовой программе.
Все операции Microsoft.Quantum.Intrinsic namespace выражаются посредством однокубитных поворотов, Т-операций, однокубитных операций Клиффорда, операций контролируемого логического отрицания и измерений многокубитных наблюдаемых объектов Паули. Счетчик простейших операций агрегирует и накапливает статистические данные по всем краям графа вызовов операции.
Как посчитать количество текстовых повторов в таблице Excel, функция СЧЕТЕСЛИ
Вызов счетчика простейших операций
Чтобы запустить симулятор квантовой трассировки со счетчиком простейших операций, необходимо создать экземпляр QCTraceSimulatorConfiguration, присвоить его свойству UsePrimitiveOperationsCounter значение true, а затем создать новый экземпляр QCTraceSimulator с параметром QCTraceSimulatorConfiguration .
var config = new QCTraceSimulatorConfiguration(); config.UsePrimitiveOperationsCounter = true; var sim = new QCTraceSimulator(config);
Использование счетчика простейших операций в ведущей программе на C#
В примере на C#, приведенном в этом разделе далее, подсчитывается количество операций T operation, необходимых для реализации операции CCNOT operation, на основе следующего примера кода Q#:
open Microsoft.Quantum.Intrinsic; operation ApplySampleWithCCNOT() : Unit
Чтобы проверить, что для CCNOT требуется семь операций T и что ApplySampleWithCCNOT выполняет восемь операций T , используйте следующий код на C#:
// using Microsoft.Quantum.Simulation.Simulators.QCTraceSimulators; // using System.Diagnostics; var config = new QCTraceSimulatorConfiguration(); config.UsePrimitiveOperationsCounter = true; var sim = new QCTraceSimulator(config); var res = ApplySampleWithCCNOT.Run(sim).Result; double tCountAll = sim.GetMetric(PrimitiveOperationsGroupsNames.T); double tCount = sim.GetMetric(PrimitiveOperationsGroupsNames.T);
Первая часть программы выполняет ApplySampleWithCCNOT . Во второй части используется метод QCTraceSimulator.GetMetric для получения количества операций T , выполняемых в ApplySampleWithCCNOT :
При вызове GetMetric с параметрами двух типов он возвращает значение метрики, связанное с заданным краем графа вызовов. В предыдущем примере программа вызывает операцию Primitive.CCNOT в ApplySampleWithCCNOT , и, следовательно, граф вызовов содержит ребро .
Как посчитать сложность алгоритма по BIG O | Самое понятное объяснение!
Чтобы получить количество используемых операций CNOT , добавьте следующую строку:
double cxCount = sim.GetMetric(PrimitiveOperationsGroupsNames.CX);
Наконец, можно вывести всю статистику, собранную с помощью счетчика простейших операций, в формате CSV с помощью следующей команды:
string csvSummary = sim.ToCSV()[MetricsCountersNames.primitiveOperationsCounter];
См. также раздел
- Обзор симулятора квантовойQuantum Development Kit трассировки.
- Справочник по API QCTraceSimulator.
- Справочник по API QCTraceSimulatorConfiguration.
- Справочник по API PrimitiveOperationsGroupsNames.
Источник: learn.microsoft.com
Урок 39
§22. Сложность алгоритмов
Рассмотрим алгоритмы выполнения различных операций с массивом А длины N, который может быть объявлен в программе так:
целтаб А[1:N] var A: array[1..N] of integer;
Пример 1. Вычислить сумму значений первых трёх элементов массива (при N ≥ 3).
Решение этой задачи содержит всего один оператор:
Этот алгоритм включает две операции сложения и одну операцию записи значения в память, поэтому его сложность T(N) = 3 не зависит от размера массива вообще.
Вычислите количество операций (считая сравнения и присваивание значений переменным) при выполнении фрагмента программы:
Пример 2. Вычислить сумму значений всех элементов массива.
В этой задаче уже не обойтись без цикла:
Здесь выполняется N операций сложения и N + 1 операция записи в память, поэтому его сложность T(N) = 2N + 1 возрастает линейно с увеличением длины массива.
Вычислите количество операций при выполнении фрагмента программы:
Пример 3. Отсортировать все элементы массива по возрастанию методом выбора. Напомним, что метод выбора предполагает поиск на каждом шаге минимального из оставшихся неупорядоченных значений (здесь i, j, nMin и с — целочисленные переменные):
Подсчитаем отдельно количество сравнений и количество перестановок. Количество сравнений элементов массива не зависит от данных и определяется числом шагов внутреннего цикла:
Здесь использована формула для суммы первых N — 1 членов арифметической прогрессии.
На каждом шаге внешнего цикла происходит перестановка двух элементов, общее количество перестановок равно Тn( N) = N -1, т. е. сложность по перестановкам — линейная.
Определите количество операций при вычислении суммы значений элементов квадратной матрицы А размером N х N (здесь i, j и Sum — целочисленные переменные):
По результатам этих примеров можно сделать выводы:
• простой цикл, в котором количество шагов пропорционально N, — это алгоритм линейной сложности;
• вложенный цикл, в котором количество шагов внешнего и внутреннего цикла пропорционально N, — это алгоритм квадратичной сложности.
Следующая страница Что такое асимптотическая сложность?
Cкачать материалы урока
Источник: xn—-7sbbfb7a7aej.xn--p1ai