De Bruijin序列与魔术(三)——De Bruijin序列的拓展思考

news2024/12/27 14:01:47

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

在前面的文章中,我们已经介绍完经典DeBruijin序列的原理和魔术,相关内容请戳:

De Bruijin序列与魔术(二)——魔术《De Bruijin序列》

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

在上一讲中,我们讲到了其中的一个经典作品,《De Bruijin序列魔术》,那是一个数学痕迹十分明显的魔术。这一切都源于一个长度为32的De Bruijin序列,长度上离理想的52张牌还有距离。今天,我们就来尝试从数学理论和魔术需求结合的角度来找找看,有没有更好的序列可以发明和使用。

De Bruijin序列的参数扩展思路

先来回顾一下De Bruijin图。

图1 De Bruijin图

ec1bde406ef39ab61ce85ae1b2d9a821.png

根据De Bruijin序列的定义,D(k, n)中,k为字母表的大小,我们可以取2以外的3,4等值,不过太大的也没必要尝试了,因为这样的De Bruijin序列的长度会瞬间膨胀到远超几十张扑克牌的数量级,没必要也难以用扑克牌的点数进行编码(13也许有奇效可以试试,毕竟和扑克牌的编码范围相等,但试过以后发现,不仅计算量指数增长受不了,因为它是每个原bit的编码数由2变为13,两个位就变成了169,并不满足我们方便地编码一张扑克牌的范围需求,就放弃了);另外n的数值可以取2~10这样的范围,来搜寻可能的其他De Bruijin序列。

但还有一个问题在于,De Bruijin循环序列的搜寻等价于一个汉密尔顿圈问题,是个被证明的np完全问题,是不能够在多项式时间内,确定地判定和找到可行解的。当然有一些启发式算法可以一定程度上缓解这个问题,去搜寻到一些解。但是在这个具体的数学魔术问题上,我们并不需要保证解的完备性,甚至都不需要是个严格的De Bruijin序列,哪怕只是De Bruijin图上的一个小小的子串都行。唯一我们关心的问题是,这种构造方式上的简便性和可拓展性,以及推导出来的序列能否用扑克牌的特征方便地表征编码,以及最后根据这些多进制的数能写出比较合理的公式来解码出对应的扑克牌花色点数来。这一点重要的特征便是,圈的长度最好是13的某倍数,如果是52那就是绝配了,如果是51~55之间的数,也依旧可以细微调整到绝配。

于是这个问题就转化为在一个个De Bruijin图上去找合适大小的圈,如果你愿意放弃可切牌的属性,也就是只是找一条迹的话,那随随便便就能找到。可是这样的序列太多也毫无意义,放弃了可切牌的循环群属性,也增加了魔术操作的难度。

到此,找这个圈最后还剩下一个关键问题,就是如何去写一个方便计算而合理的递推公式,因为只有它易于实现和推导,我们才能够去推导后面的位值,进而去计算整个被观众选择的n张牌的值。

De Bruijin序列的参数扩展公式

参考前面经典De Bruijin魔术里的做法,它其实是取了阶次5以前的值和前面还剩下4个值中的倒数第3个的不进位和。于是我决定从以下角度取泛化这个公式来搜索:

1. 计算式子在k = 2时,我们用的亦或运算有着对0和1两个取值的对称性,即你把0和1对换一下,所有的计算结论会变成其对偶运算同或。但是其他的如且,或等运算,都没有这样的性质。如果你再去构造一个把0 + 1和1 + 0的结果改成不相同的运算的话,那直接交换律都没有了,越来越不优雅;

2. 递推式子的k变为2以上的数时,我们仍然沿用不进位加法的原理,也就是mod加法的模式来推导,这也是我们在k = 2时候用亦或运算而不是同或以及其他bool运算的原因,因为可以和k为更大数值的情况兼容;

3. 我们使用的有且仅有两个前置项来递推后一项的值,一个是2个数时有很好的二元运算的性质,尤其在二进制的时候;另外,增加一个数来加或者减,增加运算量也就增加了魔术的执行难度,只有当这种策略找不到合适的解,没办法了,才会出此下策去尝试;

4. 递推二项中,一定包含一项是n项以前的那个。否则所谓的n阶递推公式实际上就退化为阶次倒退最多的那一个,那也就倒退为实质上n更低的De Bruijin序列的问题中了,没有什么必要;

根据以上经验和数学逻辑的判断,我最终确定了我搜寻De Bruijin图中子圈的公式定为:

a_l = (a_(l - n) + a(l - n + m)) % k,m = 1:(n - 1)

按照这个公式,从[0] * (n - 1) + [1]开始递推,直到发现任何圈即停止,注意这里并不一定要回到起点,选取00001这种开头也是为了保证递推公式有个基本的起点,不至于停着不动。不过,这个方式也是有可能因为起点选择不合适而漏圈的,不过无所谓了,公式已经漏了很多了,我们只需要找到合适的那么1个不错的可行解就够了。

当然这里还可以有不少拓展,比如对值乘以x,然后加上一些常数y等等,再这么做下去,这个玩意就要越来越像Richard Osterlind的序列系列了,甚至那里还只是一阶关联,只不过把花色和点数分开编码使用。那部分内容也十分精彩,甚至可以和这里的内容互相借鉴,我们后面再接着介绍。

那搜寻结果到底如何呢?

我们下回揭晓!

fdad9daaf4d20a7c18701566fef38bd7.gif

我们是谁:

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

6311d362d8935ad5a7f18d5353def55d.gif

e514dc0e0af7d3932a9a1be243c8f9df.png

a98f8e38923258f9e1819b1d2de45dc2.jpeg

扫描二维码

关注更多精彩

De Bruijin序列与魔术(二)——魔术《De Bruijin序列》

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

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

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

好魔术背后的秘密

31e09f741628055664850106be5c69eb.gif

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

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

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

相关文章

Chord diagram | 啧啧啧!~人人必会的Chord diagram你不来学一学吗!?

1写在前面 啊啊啊啊啊!!!!~终于值完夜班休息了。😭 最近是大搞医疗反腐的日子,㊗️各位执法人员成绩满满!~🤒 听说以后医务人员要年薪制了,完全搞不懂这些东西的初衷和理…

七夕好物分享,哪些礼物适合送男/女朋友?这几款好物最为合适!

七夕是个值得纪念的日子,牛郎织女鹊桥相会的故事百年流传,七夕是一个表达爱意的节日,送礼物是必不可少的,情侣们可以选择一份有意义的礼物,也可以选择对方需要的东西当做礼物来赠送,总的来说,送…

STM32F429IGT6使用CubeMX配置按键检测

1、硬件电路 2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置GPIO引脚 4、生成工程配置 5、部分代码 /* USER CODE BEGIN 0 */ //按键检测函数 void KEY_Test(void) {if(SET HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)){while(SET HAL_GPIO_ReadPin(…

HCIP 链路聚合技术

1、链路聚合概述 为了保证网络的稳定性,仅仅是设备进行备份还不够,我们需要针对我们的链路进行备份,同时也增加了链路的利用率,提高带宽。避免一条链路出现故障,导致网络无法正常通信。这就可以使用链路聚合技术。 以…

PyTorch翻译官网教程-NLP FROM SCRATCH: GENERATING NAMES WITH A CHARACTER-LEVEL RNN

官网链接 NLP From Scratch: Generating Names with a Character-Level RNN — PyTorch Tutorials 2.0.1cu117 documentation 使用字符级RNN生成名字 这是我们关于“NLP From Scratch”的三篇教程中的第二篇。在第一个教程中</intermediate/char_rnn_classification_tutor…

走进知识图谱(二)【世界知识图谱篇】知识表示的经典模型与平移模型及基于复杂关系建模的知识表示学习

上篇文章提到&#xff0c;该系列文章将主要围绕世界知识图谱和语言知识图谱这两大类知识图谱进行展开&#xff0c;并且提到知识图谱的主要研究包括了知识表示学习、知识自动获取和知识的推理与应用三大部分。今天主要介绍世界知识图谱的知识表示学习&#xff0c;其中包括经典的…

netty基础与原理

Netty线程模型和Reactor模式 简介&#xff1a;reactor模式 和 Netty线程模型 设计模式——Reactor模式&#xff08;反应器设计模式&#xff09;&#xff0c;是一种基于 事件驱动的设计模式&#xff0c;在事件驱动的应用中&#xff0c;将一个或多个客户的 服务请求分离&#x…

跑步运动耳机哪个牌子好、跑步运动耳机推荐

随着生活质量的提高&#xff0c;运动健身已经成为一种新的潮流&#xff0c;而跑步更是如今众多人参与的热门运动项目之一。在谈到跑步时&#xff0c;很多人习惯性地戴上耳机&#xff0c;在奔跑的过程中播放自己喜欢的音乐&#xff0c;以免运动变得枯燥&#xff0c;并增添一些轻…

开工大吉|华润鞋业二期自动化改造项目开工典礼圆满举行

2023年8月10日上午&#xff0c;山东百华鞋业有限公司择良辰吉时隆重举行了华润鞋业二期厂房动工仪式&#xff0c;公司总经理郭兴梅女士携公司管理层代表和施工单位代表参加了动工仪式。 根据公司发展规划&#xff0c;对未来发展的美好期许&#xff0c;以及公司生产与研发保持的…

从 Zebec Protocol 长期布局看,ZBC 通证的潜在应用场景

流支付协议 Zebec Protocol 在去年被推出以来&#xff0c;始终保持着较为迅猛的市场进展&#xff0c;与此同时其还基于 ZBC 构建了全新的治理体系&#xff0c;并上线了以 ZBC 资产为核心的治理系统&#xff0c;让生态逐渐走向 DAO。

题目大解析(3)

题目 字符串中的第一个唯一字符 字符串中的第一个唯一字符 原题链接&#xff1a;字符串中的第一个唯一字符 计数法&#xff1a; class Solution { public:int firstUniqChar(string s) {int arr[130] {0};for(auto x : s){arr[x-0];}int i 0;for(auto x : s){if(arr[x-0] …

《算法竞赛·快冲300题》每日一题:“造电梯”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 造…

使用python对图像加噪声

加上雨点噪声 import cv2 import numpy as npdef get_noise(img, value10):#生成噪声图像>>> 输入&#xff1a; img图像value 大小控制雨滴的多少 >>> 返回图像大小的模糊噪声图像noise np.random.uniform(0, 256, img.shape[0:2])# 控制噪声水平&#xff…

Arduino ESP32 v2 使用记录:开发环境搭建

文章目录 目的开发环境搭建程序下载测试使用VS Code进行开发批量烧录固件到模块中总结 目的 在之前的文章 《使用Arduino开发ESP32&#xff08;01&#xff09;&#xff1a;开发环境搭建》 中介绍了使用Arduino开发ESP32的开发环境搭建内容&#xff0c;只不过当时的 Arduino co…

写一个函数返回参数二进制中 1 的个数(c语言三种实现方法)

&#xff08;本文旨在自己做题时的总结&#xff0c;我会给出不同的解法&#xff0c;后面如果碰到新的题目还会加入其中&#xff0c;等于是我自己的题库。 1.写一个函数返回参数二进制中 1 的个数。 比如&#xff1a; 15 0000 1111 4 个 1 方法一&#xff1a; #include…

Kubernetes 调度约束(亲和性、污点、容忍)

目录 一、Pod启动典型创建过程 二、调度流程 三、指定调度节点 1.使用nodeName字段指定调度节点 2.使用nodeSelector指定调度节点 2.1给对应的node节点添加标签 2.2修改为nodeSelector调度方式 3.通过亲和性来指定调度节点 3.1节点亲和性 3.2Pod亲和性与反亲和性 3.2…

SAP MM学习笔记18- SQVI 工具

Tr-cd SQVI 是一个SAP数据库工具。 使用这个工具&#xff0c;可以自己构建查询界面中的条件&#xff0c;查询对象&#xff0c;从而自由查询数据&#xff0c;实现标准没有的功能。 1&#xff0c;SQVI 和 SQ1&#xff0c;SQ2&#xff0c;SQ3 的不同 SQ1&#xff0c;2&#xff0…

【hello C++】智能指针

目录 一、内存泄漏 1.1 什么是内存泄漏&#xff0c;内存泄漏的危害 1.2 内存泄漏分类 1.3 如何检测内存泄漏 1.4 如何避免内存泄漏 二、智能指针的使用及原理 2.1 RAII 2.2 智能指针的原理 2.3 智能指针的发展历程 2.4 智能指针的模拟及实现 三、shared_ptr 常见的问题 3.1 线程…

10.pod资源限制和健康检查

文章目录 资源限制探针&#xff08;健康检查&#xff09;启动、退出动作总结 资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。当为 pod 中的容器指定了 request 资源时&#xff0c…

5. vue-element-admin 二次开发攻略指南

vue-element-admin一站式后端 UI框架二次开发攻略指南 1.1 前言1.2 修改 Logo 名称和图标1.3 控制设置齿轮是否显示或隐藏1.4 框架安装依赖优化脚本1.5 定义多环境配置文件1.6 优化打包流程1.7 优化打包流程输出文件路径配置1.8 nginx 配置1.9 docker file 配置 2. 代码地址 1.…