热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

超级立方体小记

在多指令流多数据流MIMD里面有用到基于超立方体互联的网络结构,用《图论导引》里面简单的描述,就是处理器能通信,当且仅当他们的邻接(k元祖代表了处理器的地址)一个k


在多指令流多数据流MIMD里面有用到基于超立方体互联的网络结构,

用《图论导引》里面简单的描述,就是处理器能通信,当且仅当他们的邻接(k元祖代表了处理器的地址)


一个 k 维立方体(或者超立方体Qk)是一种简单图,每个顶点{0,1}标记的k元祖来表示。

相邻的顶点之间的 k 元祖只有一个位置上数字不同,Qk 的生成立方体 Qj 和 Qj 本身同构。


这是Q3的表示:



仔细观察会发现,Qk图里面的每条边链接的两个顶点的k元祖里的1的个数一端是奇数,另一端为偶数,

因此包含奇数个数 1 的点可以当做一个集合,偶数的也可以,所以 Qk 为二分图。

显而易见 Qk 有 2^k个顶点,每个顶点度为 k ,那么 Qk 里面会有 k* (2^k) / 2 条边。


Qk 里面有多少个 Qj 呢?

那么到底什么是( 1,1,0,0,1,0,.............,1 ) 呢?

想想也就是 k 维世界的坐标,那么隔绝掉一维或者几个维度,剩下的就是那个世界里的空间变化情况。

可以这样想,k 维度空间的世界里面固定 j 维,假设在这样 j 维的世界里面只生产拥有 j 个维度的事物,

也就是元祖里面还剩下 k - j 个元素没有被固定,每个 j 维世界都有 2^( k - j ) 个事物( Qj ),

那么 Qk 里面就一共有 C( k,j ) * 2^( k - j ) 个 Qj。

(或者反过来说,如果想要得到一个Qj,只需要固定 k - j 个标识,而将剩下的 j 位,取遍 2^j,

得到2^j个顶点,和它们间相连的边,就是一个Qj)


这是一个Q4图,Q4可以看做由一个Q3沿着某个维度移动一定距离,

然后将点对链接在一起得到的。里面有8 == C(4,3) * 2^1 个Q3(绿)。




这也是Q4的另一种样子,如果你能想象出其由8个立方体叠在一起的话........

人的大脑里面并没有“厚度”的概念,所以只能通过数学的方式来理解高维空间的物体。





应用:

1.E-立方体路由算法

比如给定立方体中的起始点 s 和终止点 d,问从 s 到 d 的最短路径


步骤:

1.计算方向位,r[i] = s[i-1] xor d[i-1],其中i = 1,,,n

令 i = 1, v = s

2.若r[i] == 1,则从当前节点寻找下一节点 v xor 2^(i-1)

若r[i] == 0,跳过

3.i = i + 1,若 i <= n, 转2,否则退出


假设这里 s = 0110,d = 1101

step1.计算方位,r = s xor d = 1011

step2.因为 r[1] == 1,v = 0110 xor 0001 = 0111, i = 1

step3.因为 r[2] == 1,v = 0111 xor 0010 = 0101, i = 2

step4.因为 r[3] == 0,跳过 v = 0101, i = 3

step5.因为 r[4] == 1,v = 0101 xor 1000 = 1101 = d, i = 4, end

路径为 0110 -> 0111 -> 0101 -> 1101


2.任意子连通 N 维立方体路由算法

先睡了






推荐阅读
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
author-avatar
孤魂地狱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有