QuantumNearestNeighbor

Struct QuantumNearestNeighbor 

Source
pub struct QuantumNearestNeighbor { /* private fields */ }
Expand description

Quantum-Enhanced Nearest Neighbor Search

This structure implements a quantum-inspired nearest neighbor search algorithm that uses quantum state representations and amplitude amplification to enhance search performance. The algorithm can operate in pure quantum mode or fall back to classical computation for compatibility.

§Features

  • Quantum state encoding of reference points
  • Amplitude amplification using Grover-like algorithms
  • Quantum fidelity-based distance computation
  • Classical fallback for robustness

§Example

use scirs2_core::ndarray::Array2;
use scirs2_spatial::quantum_inspired::algorithms::QuantumNearestNeighbor;

let points = Array2::from_shape_vec((3, 2), vec![0.0, 0.0, 1.0, 1.0, 2.0, 2.0]).unwrap();
let mut searcher = QuantumNearestNeighbor::new(&points.view())
    .unwrap()
    .with_quantum_encoding(true)
    .with_amplitude_amplification(true);

let query = scirs2_core::ndarray::arr1(&[0.5, 0.5]);
let (indices, distances) = searcher.query_quantum(&query.view(), 2).unwrap();

Implementations§

Source§

impl QuantumNearestNeighbor

Source

pub fn new(points: &ArrayView2<'_, f64>) -> SpatialResult<Self>

Create new quantum nearest neighbor searcher

§Arguments
  • points - Reference points for nearest neighbor search
§Returns

A new QuantumNearestNeighbor instance with default configuration

Source

pub fn with_quantum_encoding(self, enabled: bool) -> Self

Enable quantum encoding of reference points

When enabled, reference points are encoded as quantum states which can provide enhanced search performance through quantum parallelism.

§Arguments
  • enabled - Whether to enable quantum encoding
Source

pub fn with_amplitude_amplification(self, enabled: bool) -> Self

Enable amplitude amplification (Grover-like algorithm)

Amplitude amplification can enhance search performance by amplifying the probability amplitudes of good solutions.

§Arguments
  • enabled - Whether to enable amplitude amplification
Source

pub fn with_grover_iterations(self, iterations: usize) -> Self

Configure Grover iterations

Sets the number of Grover iterations used in amplitude amplification. More iterations can improve search quality but increase computation time.

§Arguments
  • iterations - Number of Grover iterations (typically 3-5 for best results)
Source

pub fn query_quantum( &self, query_point: &ArrayView1<'_, f64>, k: usize, ) -> SpatialResult<(Vec<usize>, Vec<f64>)>

Perform quantum-enhanced nearest neighbor search

Finds the k nearest neighbors to a query point using quantum-enhanced distance computation when quantum encoding is enabled, otherwise falls back to classical Euclidean distance.

§Arguments
  • query_point - Point to search for neighbors
  • k - Number of nearest neighbors to find
§Returns

Tuple of (indices, distances) for the k nearest neighbors

Source

pub fn len(&self) -> usize

Get number of reference points

Source

pub fn is_empty(&self) -> bool

Check if searcher is empty

Source

pub fn classical_points(&self) -> &Array2<f64>

Get reference to classical points

Source

pub fn is_quantum_enabled(&self) -> bool

Check if quantum encoding is enabled

Source

pub fn is_amplification_enabled(&self) -> bool

Check if amplitude amplification is enabled

Trait Implementations§

Source§

impl Clone for QuantumNearestNeighbor

Source§

fn clone(&self) -> QuantumNearestNeighbor

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for QuantumNearestNeighbor

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V