指向未来: 量子纠缠的本质是一个指针

2024-01-17 11:36

本文主要是介绍指向未来: 量子纠缠的本质是一个指针,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

指向未来: 量子纠缠的本质是一个指针

  • 概述
  • 基本概念
  • 理解量子纠缠
    • Python
    • Java
    • C++
  • 理解波粒二象性
    • Python
    • Java
    • C++
  • 理解量子隧穿
  • 理解宇宙常量
    • Python
    • Java
    • C++

概述

量子纠缠 (Quantum Entanglement) 是量子系统重两个或多个粒子间的一种特殊连接, 这种连接使得即使相隔很远, 这些粒子的状态也仍然互相依赖.
量子纠缠

基本概念

在探讨量子纠缠之前, 我们先阐述量子比特 (Qubit)的基本概念. 位 (Bit) 是信息的基本单位, 可以处于 0 或 1 的状态. 而量子比特可以同时处于 0 和 1 的叠加态. 即在同时 True 或 False 一个确定的状态, 直到被观测. 量子比特的特性包含叠加和纠缠, 叠加允许量子比特同时存在于多种可能的状态中. 对一个纠缠量子比特的观测会影响与它纠缠的另一个两字比特的状态, 无论两个两字比特相距多远.

理解量子纠缠

两个变相共享一个指针时, 当一个量子态改变时, 另一个量子态也会随着改变, 不管相隔多远.
在我们所处的 “游戏” 中, 物理空间的限制 (距离) 并不会影响指针, 在我们看来就是类似超光速的方式传递.

指针

Python

class QuantumBitdef __init__(self, state)self.state = state# 创建量子比特变量
qubit1 = QuantumBit(False)
qubit2 = qubit1print(id(qubit1), id(qubit2))  # 内存地址相同 (指针)
print(qubit1.state, qubit2.state)  # 调试输出# 修改量子比特 2 的状态, 1 随着修改
qubit2.state = True
print(qubit1.state, qubit2.state)  # 调试输出

输出结果

1795703080464 1795703080464
False False
True True

Java

public class QuantumBit {boolean state;public QuantumBit(boolean state) {this.state = state;}public static void main(String[] args) {QuantumBit qubit1 = new QuantumBit(false);QuantumBit qubit2 = qubit1;System.out.println(System.identityHashCode(qubit1) + " " + System.identityHashCode(qubit2));  // 内存地址System.out.println(qubit1.state + " " + qubit2.state);  // 调试输出// 修改量子比特 2 的状态, 1 随着修改qubit2.state = true;System.out.println(qubit1.state + " " + qubit2.state);  // 调试输出}
}

输出结果:

225534817 225534817
false false
true true

C++

#include <iostream>class QuantumBit {public:bool state;QuantumBit(bool initState) : state(initState) {}
};int main() {QuantumBit* qubit1 = new QuantumBit(false);QuantumBit* qubit2 = qubit1;std::cout << qubit1 << " " << qubit2 << std::endl;  // 内存地址std::cout << qubit1->state << " " << qubit2->state << std::endl;  // 调试输出// 修改量子比特 2 的状态, 1 随着修改qubit2->state = true;std::cout << qubit1->state << " " << qubit2->state << std::endl;  // 调试输出delete qubit1;  // 清理内存// 不需要 delete qubit2, 内存地址相同return 0;
}

输出结果:

0x54de70 0x54de70
0 0
1 1

理解波粒二象性

同理当我们观测光是粒子还是波的时候, 我们的观测就是在 “游戏” 中调用一次函数, 这就会改变指针的状态, 从而导致量子纠缠的改变或解除 (塌缩).

光既不是粒子也不是波, 拥有绝对速度所以可能呈现为粒子或波, 取决于我们怎么调用函数. 为了避免我们这个 “游戏” 吃过多的算力, 所以没有观测的时候就不需要加载, 观测了才加载.

Python

import randomclass QuantumObject:def __init__(self):# 初始状态为 None,表示既是波也是粒子 (叠加态)self.state = Nonedef observe(self):# 观测时随机决定对象表现为波或粒子self.state = random.choice(['wave', 'particle'])return self.state# 创建一个量子对象
quantum_object = QuantumObject()# 模拟观测过程
for _ in range(10):result = quantum_object.observe()print(result)

输出结果:

particle
wave
particle
wave
wave
particle
particle
particle
wave
wave

Java

import java.util.Random;class QuantumObject {private String state;public QuantumObject() {// 初始状态为 null,表示既是波也是粒子 (叠加态)this.state = null;}public String observe() {// 观测时随机决定对象表现为波或粒子Random random = new Random();this.state = random.nextBoolean() ? "wave" : "particle";return this.state;}
}public class Main {public static void main(String[] args) {QuantumObject quantumObject = new QuantumObject();// 模拟观测过程for (int i = 0; i < 10; i++) {String result = quantumObject.observe();System.out.println(result);}}
}

输出结果:

标准输出:particle
wave
particle
particle
wave
wave
wave
particle
wave
wave

C++

#include <iostream>
#include <cstdlib>
#include <ctime>class QuantumObject {std::string state;public:QuantumObject() : state("") {}std::string observe() {// 观测时随机决定对象表现为波或粒子state = (rand() % 2 == 0) ? "wave" : "particle";return state;}
};int main() {srand(time(0));  // 初始化随机数生成器QuantumObject quantumObject;// 模拟观测过程for (int i = 0; i < 10; i++) {std::string result = quantumObject.observe();std::cout << result << std::endl;}return 0;
}

输出结果:

particle
wave
particle
wave
wave
particle
wave
particle
wave
particle

理解量子隧穿

当粒子通过量子势垒时, 正常来说是过不去的. 但是如果粒子是一个函数 (Function), 代表粒子的就是一个函数指针, 量子势垒是一个调度器. 之所以量子无法穿过势垒, 是应该进入势垒后指针发生了偏移. 当我们看到接触势垒被弹回来的粒子, 我们看到的是该粒子的指针, 但是不是原来的例子所指的函数对象了.

量子隧穿

import randomdef particle_function():return "原始粒子"def altered_function():return "改变后的粒子"def quantum_barrier(particle):if random.random() < 0.5:  # 假设有 50% 概率粒子指针发生偏移return altered_functionelse:return particlefor _ in range(10):# 创建粒子函数指针particle_ptr = particle_function# 模拟粒子接触量子势垒particle_ptr = quantum_barrier(particle_ptr)# 输出粒子状态print(particle_ptr())

输出结果:

原始粒子
原始粒子
改变后的粒子
改变后的粒子
改变后的粒子
改变后的粒子
改变后的粒子
原始粒子
改变后的粒子
改变后的粒子

理解宇宙常量

为了避免我们这个 “游戏” 产生内存溢出或者消号过多算力, 所以我们需要一些常量 (Constant) 来进行限速.

速度越快时间越慢, 为了避免游戏崩溃, 对于消耗过多算力的函数, 游戏回尽可能少的调用, 放慢时钟. 在物理上就会导师时间间隔变长.

Python

# 光速, 单位: 米 / 秒
SPEED_OF_LIGHT = 299792458# 普朗克常量, 单位: 焦耳·秒
PLANCK_CONSTANT = 6.62607015e-34# 万有引力常数, 单位: 牛顿·平方米 / 平方千克
GRAVITATIONAL_CONSTANT = 6.67430e-11# 玻尔兹曼常量, 单位: 焦耳 / 开尔文
BOLTZMANN_CONSTANT = 1.380649e-23# 阿伏伽德罗常数, 单位: 1 / 摩尔
AVOGADRO_CONSTANT = 6.02214076e23# 电子电荷, 单位: 库仑
ELEMENTARY_CHARGE = 1.602176634e-19# 真空磁导率, 单位: 特斯拉·米 / 安培
VACUUM_PERMEABILITY = 4 * 3.14159265358979323846e-7# 真空电容率, 单位: 法拉 / 米
VACUUM_PERMITTIVITY = 8.854187817e-12# 标准大气压, 单位: 帕斯卡
STANDARD_ATMOSPHERE = 101325# 斯特藩-玻尔兹曼常数, 单位: 瓦特 / 平方米·开尔文^4
STEFAN_BOLTZMANN_CONSTANT = 5.670374419e-8

Java

// 光速, 单位: 米 / 秒public static final double SPEED_OF_LIGHT = 299792458;// 普朗克常量, 单位: 焦耳·秒public static final double PLANCK_CONSTANT = 6.62607015e-34;// 万有引力常数, 单位: 牛顿·平方米 / 平方千克public static final double GRAVITATIONAL_CONSTANT = 6.67430e-11;// 玻尔兹曼常量, 单位: 焦耳 / 开尔文public static final double BOLTZMANN_CONSTANT = 1.380649e-23;// 阿伏伽德罗常数, 单位: 1 / 摩尔public static final double AVOGADRO_CONSTANT = 6.02214076e23;// 电子电荷, 单位: 库仑public static final double ELEMENTARY_CHARGE = 1.602176634e-19;// 真空磁导率, 单位: 特斯拉·米 / 安培public static final double VACUUM_PERMEABILITY = 4 * Math.PI * 1e-7;// 真空电容率, 单位: 法拉 / 米public static final double VACUUM_PERMITTIVITY = 8.854187817e-12;// 标准大气压, 单位: 帕斯卡public static final int STANDARD_ATMOSPHERE = 101325;// 斯特藩-玻尔兹曼常数, 单位: 瓦特 / 平方米·开尔文^4public static final double STEFAN_BOLTZMANN_CONSTANT = 5.670374419e-8;

C++

// 阿伏伽德罗常数, 单位: 1 / 摩尔
static constexpr double AVOGADRO_CONSTANT = 6.02214076e23;// 电子电荷, 单位: 库仑
static constexpr double ELEMENTARY_CHARGE = 1.602176634e-19;// 真空磁导率, 单位: 特斯拉·米 / 安培
static constexpr double VACUUM_PERMEABILITY = 4 * 3.14159265358979323846e-7;// 真空电容率, 单位: 法拉 / 米
static constexpr double VACUUM_PERMITTIVITY = 8.854187817e-12;// 标准大气压, 单位: 帕斯卡
static constexpr int STANDARD_ATMOSPHERE = 101325;// 斯特藩-玻尔兹曼常数, 单位: 瓦特 / 平方米·开尔文^4
static constexpr double STEFAN_BOLTZMANN_CONSTANT = 5.670374419e-8;

这篇关于指向未来: 量子纠缠的本质是一个指针的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/615892

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

未来工作趋势:零工小程序在共享经济中的作用

经济在不断发展的同时,科技也在飞速发展。零工经济作为一种新兴的工作模式,正在全球范围内迅速崛起。特别是在中国,随着数字经济的蓬勃发展和共享经济模式的深入推广,零工小程序在促进就业、提升资源利用效率方面显示出了巨大的潜力和价值。 一、零工经济的定义及现状 零工经济是指通过临时性、自由职业或项目制的工作形式,利用互联网平台快速匹配供需双方的新型经济模式。这种模式打破了传统全职工作的界限,为劳动

C和指针:字符串

字符串、字符和字节 字符串基础 字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。 字符串长度就是字符串中字符数。 size_t strlen( char const *string ); string为指针常量(const修饰string),指向的string是常量不能修改。size_t是无符号数,定义在stddef.h。 #include <stddef.h>

【C++】作用域指针、智能指针、共享指针、弱指针

十、智能指针、共享指针 从上篇文章 【C++】如何用C++创建对象,理解作用域、堆栈、内存分配-CSDN博客 中我们知道,你的对象是创建在栈上还是在堆上,最大的区别就是对象的作用域不一样。所以在C++中,一旦程序进入另外一个作用域,那其他作用域的对象就自动销毁了。这种机制有好有坏。我们可以利用这个机制,比如可以自动化我们的代码,像智能指针、作用域锁(scoped_lock)等都是利用了这种机制。

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD

C和指针:结构体(struct)和联合(union)

结构体和联合 结构体 结构体包含一些数据成员,每个成员可能具有不同的类型。 数组的元素长度相同,可以通过下标访问(转换为指针)。但是结构体的成员可能长度不同,所以不能用下标来访问它们。成员有自己的名字,可以通过名字访问成员。 结构声明 在声明结构时,必须列出它包含的所有成员。 struct tag {member-list} variable-list ; 定义一个结构体变量x(包含