Chris Hung (Rocket & Optimization)
void DecideSearchingMethod()
{
if(linear())
Binary_Search();
else
Ternary_Search();
}
public boolean PathAvoidKOZ(Point begin, Point end)
{
for(int i=0;i<KOZ_MAX.size();i++)
{
if((begin.getX()>=KOZ_MIN.get(i).getX()&&begin.getX()<=KOZ_MAX.get(i).getX())||end.getX()<=KOZ_MAX.get(i).getX()&&end.getX()>=KOZ_MIN.get(i).getX())
if((begin.getY()>=KOZ_MIN.get(i).getY()&&begin.getY()<=KOZ_MAX.get(i).getY())||end.getY()<=KOZ_MAX.get(i).getY()&&end.getY()>=KOZ_MIN.get(i).getY())
if((begin.getZ()>=KOZ_MIN.get(i).getZ()&&begin.getZ()<=KOZ_MAX.get(i).getZ())||end.getZ()<=KOZ_MAX.get(i).getZ()&&end.getZ()>=KOZ_MIN.get(i).getZ())
return true;
}
return false;
}
Topological sort, PERT
#include<bits/stdc++.h>
using namespace std;
#define mx 200005
vector<int>g[mx];
int visited[mx];
stack<int>s;
void dfs(int u)
{
visited[u]=1;
for(int i=0; i<g[u].size(); i++)
{
int v=g[u][i];
if(visited[v]==0) dfs(v);
}
s.push(u);
}
int main()
{
int n;
cin>>n; //number of vertex
int m;
cin>>m; //number of edges
while(m--)
{
int u,v;
cin>>u>>v;
g[u].push_back(v); //making one directional graph
}
for(int i=1;i<=n;i++){
if(visited[i]==0) dfs(i);
}
for(int i=0; i<n; i++)
{
int x=s.top();
x.pop();
cout<<x<" ";
}
cout<<endl;
}
A project management technique called Pert involves breaking a large project into a number of tasks, estimating the time required to perform each task, and determining which tasks can not be started until others have been completed. The project is then summarized in chart form. For example, the chart
indicates that tasks A, B, C, D, E and F each take 5, 3, 2, 2, 4, and 2 days respectively, that task E cannot complete until C and D are both completed, but that D can be performed in parallel with B and C. Write a program that accepts a Pert chart and computes the amount of time required to complete a project.
Step 1-1: 活動網路
Step 2: 甘特圖
Step3: 關鍵路徑法 via Dynamic Programming
the longest sequence of activities that must be finished on time in order for the entire project to be complete.
#include <stdio.h>
#include <string.h>
int main() {
int t, v;
char line[100], h[2];
scanf("%d ", &t);
while(t--) {
int map[26][26] = {}, day[26] = {}, mt[26] = {};
int i, j, done[26] = {};
while(gets(line)) {
if(line[0] == '\0')
break;
sscanf(line, "%s %d", h, &v);
j = h[0]-'A', done[j] = 1;
day[j] = v;
for(i = strlen(line)-1; i >= 0; i--) {
if(line[i] < 'A' || line[i] > 'Z')
break;
map[j][mt[j]++] = line[i]-'A';
}
}
int fin[26] = {}, used[26] = {};
int max, ans = 0;
while(1) {
int flag = 0;
for(i = 0; i < 26; i++) {
if(used[i] == 0 && done[i] == 1) {
max = 0;
for(j = 0; j < mt[i]; j++) {
if(used[map[i][j]] == 0)
break;
if(fin[map[i][j]] > max)
max = fin[map[i][j]];
}
if(j == mt[i]) {
fin[i] = max+day[i];
if(fin[i] > ans)
ans = fin[i];
used[i] = 1;
flag = 1;
}
}
}
if(flag == 0)
break;
}
printf("%d\n", ans);
if(t)
puts("");
}
return 0;
}
Reference:
# Basis
import matplotlib.pyplot as plt
import numpy as np
import qiskit as q
from math import pi
from qiskit import *
# Plot data
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
# Quantum Circuit
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, transpile
from qiskit.tools.visualization import circuit_drawer
from qiskit.quantum_info import state_fidelity
# Simulator
from qiskit import BasicAer
# Tell matplotlib that we are in an Ipython notebook
%matplotlib inline
# This creates a quantum circuit object
circ = q.QuantumCircuit(1,1)
# This prints out a diagram of the circuit, the "mpl" makes it look pretty!
display(circ.draw(output="mpl"))
# Linear operation to qubit 0
circ.h(0)
circ.z(0)
circ.h(0)
display(circ.draw(output="mpl"))
# Multi-qubit
circ = q.QuantumCircuit(15,1)
circ.x(6)
display(circ.draw(output="mpl"))
# rz gate
circ.rz(m.pi,0)
display(circ.draw(output="mpl"))
# Call Aer for simulation
backend=q.Aer.get_backend('statevector_simulator')
job = q.execute(circ, backend)
result = job.result()
counts = result.get_counts(circ)
graph = q.visualization.plot_histogram(counts)
display(graph)
# Bell state: Φ+
phi_plus = q.QuantumCircuit(2)
phi_plus.h(0)
phi_plus.cx(0,1)
display(phi_plus.draw(output="mpl"))
# Bell state: Φ- (Use Built-in Function)
circ_phiminus = QuantumCircuit(2,2)
circ_phiminus.h(0)
circ_phiminus.draw('mpl')
# Build Quantum Circuit
circ_phiminus = QuantumCircuit(2,2)
circ_phiminus.h(0)
circ_phiminus.draw('mpl')
circ_phiminus.z(0) #Applying a Z gate to qubit 0
circ_phiminus.cx(0,1) #adding CNOT gate with qubit 0 as control and qubit 1 as target
circ_phiminus.measure([0,1],[0,1]) # Measure output --> Classical bit
circ_phiminus.draw('mpl')
backend = Aer.get_backend('qasm_simulator') # specifying that we will use qasm simulator
job = execute(circ_phiminus, backend, shots = 1024) # shots=1024 specifies that the circuit will be run 1024 times
result = job.result()
# getting the counts, i.e., the fraction of times the circuit gave all the possible results
counts = result.get_counts(circ_phiminus)
graph = plot_histogram(counts)
display(graph)
from qiskit_ibm_runtime import QiskitRuntimeService
options = {
'backend_name': 'ibmq_qasm_simulator'
}
runtime_inputs = {
# A PyTorch-compatible loss function. Can be one of the official PyTorch loss
# functions from ``torch.nn.loss or a custom function defined by the user.
'loss_func': None, # [object,object] (required)
# A hybrid QNN model to
# be trained.
'model': None, # object (required)
# A PyTorch optimizer to tune
# the model parameters.
'optimizer': None, # object (required)
# A PyTorch data loader object
# containing the training dataset.
'train_data': None, # object (required)
}
service = QiskitRuntimeService(
channel='ibm_quantum'
)
job = service.run(
program_id='torch-train',
options=options,
inputs=runtime_inputs,
instance='ibm-q/open/main'
)
# Job id
print(job.job_id)
# See job status
print(job.status())
# Get results
result = job.result()
A program that is made in order to facilitate (make easier) develop process