De Bruijin序列与魔术(一)——De Bruijin序列简介

news2024/12/26 21:56:41

早点关注我,精彩不错过!

欢迎回到数学魔术系列!久违了!

在牌序领域,一个特别数学化也是很冷门的一个序,DeBruijin序列,算是经典中的经典了。但它在魔术圈里流传并不甚广的原因是,可扩展性不强,学习记忆相对也困难,即魔术表演价值的性价比不是很高。但是作为一一对应函数,通信编码的经典结构,其数学价值仍然很高,魔术价值也可以继续挖掘。作为数学魔术师,我们还是应当奉为圭臬,好好品读,学习一番。

De Bruijin序列的数学原理

先看定义。

De Bruijn(Dutch) Sequence:DB(k) is a binary looped sequence of length 2 ^ k such that every k consecutive digits appears exactly once.

Corresponding De Bruijn Graph: 2 ^ k vertices and 2 ^ (k + 1) edges.

这是De Bruijin序列的数学描述,是这么一个首尾相接长度为2 ^ k的二进制循环序列(cyclic sequence,本质上是圈),其所有的2 ^ k个长度为k的二进制子串都互不相同,恰好与所有k长的二进制子串空间形成一一映射,是荷兰人Nicolaas Govert de Bruijn在大约1946年发表的成果。

很容易想明白,这其实就是一个图上的欧拉回路(Euler Circuit)。图的顶点是所有2 ^ (k - 1)个二进制序列,任意两个序列a, b,如果满足a[1:] = b[:- 1],便有边相连,对应的图叫De Bruijin图:

图1 De Bruijin图

       4e3f754b1356b43045736f47f8dffa47.png        

其实,根据一些对称性的规律构造,De Bruijin序列的解并不难找,而且解还有(k!) ^ (k ^ (n - 1)) / k ^ n这么多个。这里k是字母表的大小,是我们这里所说的二进制De Bruijin序列的扩展,记作D(k, n)。

正因为其良好的数学性质——一一对应,它被用在了很多应用领域。别小看了这个一一对应,不信你找一些例子,会发现这个世界上大部分的函数都没有这种性质,是不可逆的,倒不回去的。比如,你的身高是180,可是180的人却多了去了;你会变魔术,会阴魂不散,还会刘谦的版本,可满足这些条件的仍然不止你一个。不过,你要是有某个特质真的独一无二能够倒回去了,那就真厉害了。

提两个应用领域,一个是机器人定位。在机器人的运动规划中,要确定实时位置,如果是一维运动,那只需要去查其坐在位置的debruijin序列值,并唯一地对应回其真实坐标即可,就没必要一直保存其距离原点的距离,并每走一步都重新计算了。如果是二维运动,那也会有类似二维的deburijin序列,用一个n阶bool方阵和二维坐标之间的对应关系去索引位置,三维运动也是一样,只不过计算上会越来越复杂。还有一个是在寄存器上需要对一些信息进行加密的话,常用的有线性移位寄存器(linear-shift register),这样每次只需要移动一个位,就可以完成操作,而不需要每次都要移动全部数值,而这也是我们这个数学魔术的基本原理。

De Bruijin序列魔术应用方法

以上是De Bruijin序列数学内容和在各个领域中的应用信息。我们接着可以用魔术思维来尝试应用它。不妨我们来总结一下De Bruijin序列的数学本质,再看看哪些性质可以为魔术所用,自然就可以结合起来倒推出魔术应用思路了。

De Bruijin序列的本质是一个长度为k ^ n的圈,每个元素编码为k分类变量,其上刚好有k ^ n个长度为n的子序列,而且这些子序列两两不相同,构成一个序列起始位置到序列值的大小为k ^ n的一一映射。

很自然地,我们的扑克牌叠如果把底牌和顶牌的关系等效为和其他任意两张物理相邻扑克牌相同的一种关系,那也是一个圈,或者叫循环序列,对二切牌操作有对称不变性。那么k即为一张扑克牌的花色点数等基本信息可以编码出的一个信息的总数,如果限定在花色点数上,那最多54,而显然k不可能太大,常用的可以是颜色的2,花色的4,和点数的13。而假设我们构造出了这么一个De Bruijin序列性质的扑克牌,比如可以用花色编码4类信息,取n = 2,长度是16,能有什么用呢?

根据De Bruijin序列的定义,我们可以任意二切牌,不改变牌叠性质。然后任意选择相邻两张牌的子序列,只需要知道其花色的序列值,本来的起始位置到序列值的映射,因为是一一映射,就可以由观察的序列值反推到起始位置。进而所选两张牌的位置就都知道了。而在恒定不变的扑克牌序列中,位置知道了,值也就是固定的。

所以,如果我们有了满足De Bruijin序列性质的扑克牌叠,我们可以二切牌不打破它,同时我们只需要暗中通信到每张牌的k类信息值,就可以确定出选牌位置,进而读取其值。这些是整个De Bruijin序列魔术应用的全部原理,顶层本质上说,它是一一映射性质的绝妙应用,往下是进制编码,再往下是De Bruijin序列这个序列,以及旁的循环群的扑克牌叠的结构。

于是,要设计出基于De Bruijin序列的一一映射原理的魔术,还剩下的问题是:

1. 我们怎么去找到一个适合用扑克牌上的信息编码的k类编码和对应k值,在信息限度内,且方便记忆;

2. 合适大小的n,一起使得k ^ n能接近一副扑克牌的大小或其他可拓展大小;

3. 对应的De Bruijin序列D(k, n)的搜索;

4. 长度为n的子序列值到扑克牌值的方便记忆的映射(无需再记忆相对位置,因为对于一副以内的扑克牌,位置索引和牌值也是一一对应的);

5. De Bruijin序列本身的二阶递推关系,方便记忆和使用,同时展现在扑克牌上不能有明显规律;

看来问题还挺多的,不过数学魔术师不怕麻烦,只为了心中的灯塔。

k个类型怎么映射其实很明显了,算一下n次方的数量级也很容易确定合理的n;而其实你如果有一定的数感就知道,对于给定的k和n,找到一个可行的De Bruijin序列并不难,这里关键是怎么去构建一个De Bruijin序列,还能够有方便的递推公式同时子序列编码值映射回扑克牌的映射也要有一定规律能记忆才行。所以,设计出可行魔术的关键就在于序列递推关系的设计和子序列值到牌点的编码映射表。

这些东西,深深地吸引着数学魔术师们,朝着内心的求索,奔去。

下一篇我们进入魔术部分,先睹为快!

视频1 Debruijin魔术

dc5e39dfbddad3a2fcbbfc62d077fbbf.gif

我们是谁:

MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。既取其用数学来变魔术的本义,也取像魔术一样玩数学的意思。文章内容涵盖互联网,计算机,统计,算法,NLP等前沿的数学及应用领域;也包括魔术思想,流程鉴赏等魔术内容;以及结合二者的数学魔术分享,还有一些思辨性的谈天说地的随笔。希望你能和我一起,既能感性思考又保持理性思维,享受人生乐趣。欢迎扫码关注和在文末或公众号留言与我交流!

85faacd1e571190ad5269277339ffdcf.gif

ee4e2dce19f194d58920d2b1157e735b.png

b1cba57017846d698674ffe8ad274888.jpeg

扫描二维码

关注更多精彩

这到底是怎么想到的!!!

一道北大强基题背后的故事(七)——特征根公式的来龙去脉

用排列组合来编码通信(七)——《我的5/4张牌的预言》

好魔术背后的秘密

对称思维的妙用之从解题到本质(六)——网红鸭子半圆概率问题的多种解法

a47292389b5edde93d674a718a5c3a49.gif

点击阅读原文,往期精彩不错过!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/806994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

再创佳绩!数据猿荣获《2023金融科技影响力品牌》奖

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 7月26日至27日,CFS2023第十二届财经峰会暨2023可持续商业大会在北京举行,峰会期间举行了开幕式、高层论坛、CFS致敬盛典、2023品牌创新展等主题活动,以及多场关于数字化转型、金融创新、新…

一分钟搞定谷歌浏览器无法翻译的问题

文章目录 前言一、找到hosts.xml文件二、以记事本方式打开hosts文件三、在hosts文件最下方加入以下内容,点击保存:四、刷新DNS五、关闭google浏览器重新打开即可。 前言 提示:这里可以添加本文要记录的大概内容: 据CSDN消息&…

【Java 高频面试闯关秘籍】大梦谁先觉,平生我自知

一、mysql使用innodb引擎,请简述mysql索引的最左前缀如何优化orderby语句? 关键点: (1)如果排序字段不在索引列上,filesort有两种算法:mysql就要启动双路排序和单路排序 (2&#x…

Diffusion Model 浅学笔记

Diffusion Model Created by: 银晗 张 Created time: May 29, 2023 8:12 AM VAE → GAN →Diffusion 要讲扩散模型,不得不提VAE。VAE和GAN一样,都是从隐变量Z生成目标数据X。 它们假设隐变量服从某种常见的概率分布(比如正态分布&#xff…

Android Unit Test

一、测试基础知识 1.1 测试级别 测试金字塔(如图 2 所示)说明了应用应如何包含三类测试(即小型、中型和大型测试): 小型测试是指单元测试,用于验证应用的行为,一次验证一个类。 中型测试是指…

ROS中使用Kinect v2

ROS中使用Kinect v2 Kinect v2 简介 Kinect v2是微软公司推出的第二代Kinect深度摄像头,也称为Kinect for Xbox One或Kinect for Windows v2。它是Kinect系列产品的升级版本,于2013年首次发布。Kinect v2采用了一系列先进的传感器和技术,使其…

【MATLAB第60期】【更新中】基于MATLAB的ARMAX具有外生回归因子的移动平均自回归模型

【MATLAB第60期】【更新中】基于MATLAB的ARMAX具有外生回归因子的移动平均自回归模型 版本更新: 2023/7/29版本: 1.增加自定义参数,方便直接套数据运行。 pre_num3;%预采样数据个数 learn_pr0.85; %训练数据比例(不包括预采样数…

通讯录--集合动态的文件版

简易的通讯录往往需要朴实的“烹饪”就能完成一道“美味的佳肴”。 我们需要一个通讯录,能够存储联系人的信息,能够对联系人的信息进行增删查改,查询,按姓名排序。相比对之前的三子棋、扫雷,有了一定的了解&#xff0c…

一起学数据结构(2)——线性表及线性表顺序实现

目录 1. 什么是数据结构: 1.1 数据结构的研究内容: 1.2 数据结构的基本概念: 1.2.1 逻辑结构: 1.2.2 存储结构: 2. 线性表: 2.1 线性表的基本定义: 2.2 线性表的运用: 3 .线性…

【学会动态规划】打家劫舍 II(12)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

JavaScript学习 -- SM3算法基本原理

SM3算法是一种由国家密码管理局发布的哈希算法,被广泛用于数字签名和消息认证等应用中。在JavaScript中,我们可以使用第三方库来计算数据的SM3哈希值。本篇文章将介绍SM3算法的基本原理和相关技术,并提供一些实例来演示如何在JavaScript中使用…

深度剖析六大国产CPU

前言 CPU 是底层硬件基础设施中的核心,当前主流芯片架构为 ARM 和 X86,均为国外主导,芯片国产化率较低。“十五”期间,国家启动发展国产 CPU 的泰山计划,863 计划也提出自主研发 CPU。2006 年核高基专项启动&#xff…

阿里云服务器CPU处理器大全

阿里云服务器CPU型号是什么?处理器主频多少?云服务器ECS和轻量应用服务器CPU处理器性能如何?阿里云服务器网分享阿里云服务器CPU型号大全、处理器主频性能型号汇总: 目录 阿里云服务器CPU处理器大全 通用型云服务器CPU 计算型…

Redis系列:Redis 的事务机制

1 复习下何为事务机制? Transaction(事务)是计算机的特有术语,它一般指单个逻辑工作单位,由一系列的操作组合而成,在这些操作执行的时候,要么都执行成功,要么都不执行,防…

ENSP中路由器配置详解

目录 一:两个主机,两个路由器配置连接 二:两主机,三路由器配置连接 三:配置浮动路由 一:两个主机,两个路由器配置连接 打开ENSP 1.点击新建拓扑 2.点击路由器 3.将两个AR3260路由器拖出来…

ShardingSphere-Proxy读写分离详解与实战

🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…

基于springboot的公交线路查询系统vue

本次开发一套公交线路查询系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,公交线路管理,网站公告管理,友情链接管理,留言管理,系统管理。用户可以注册登录,查看公告线路…

java使用easyexcel读写文件

文章目录 前言一、引入pom二、write1.代码部分2.执行结果 三、read1.代码部分2.运行结果 总结 前言 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题…

掌握文件锁:使用flock实现多个进程之间的无缝文件同步

使用flock实现多个进程之间的无缝文件同步? 博主简介一、引言二、文件锁的概述2.1、定义文件锁2.2、文件锁的种类2.3、文件锁的作用 三、使用flock实现文件锁3.1、flock的简介3.2、flock的使用方法3.3、flock文件锁命令3.4、flock对文件同步的帮助 四、实现多个进程…

Sestra 实用教程(二)方程求解器

目 录 一、前言二、超单元分析三、惯性释放四、模态叠加法4.1 Eigenvalue solvers4.2 Static back substitution 五、模态综合法六、Master-Slave七、参考文献 一、前言 SESAM (Super Element Structure Analysis Module)是由挪威船级社(DNV-…