【问题标题】:Counting number of co-ordinates in hypercube计算超立方体中的坐标数
【发布时间】:2011-10-26 08:24:55
【问题描述】:

在 N 维网格中,单元格的坐标表示为 X1、X2、...、XN。任何具有负坐标的单元格都被涂成白色。原始单元格(所有坐标为零的单元格)被着色为黑色。 (X1, X2, ..., XN) 中单元格的颜色取决于坐标为 (X1-1, X2, ..., XN)、(X1, X2-1, ... , XN), ...., (X1, X2, ..., XN-1)。当且仅当这 N 个坐标中的黑色单元格的数量是偶数时,单元格才被着色为白色,否则单元格被着色为黑色。

现在,给定子超立方体的开始和结束坐标。所有坐标都将是完成查询的非负整数。我们要计算这个子超立方体中有多少个超单元是黑色的?

请建议我提示、参考或任何可以帮助我解决问题的方法。

【问题讨论】:

  • any cell with negative coordinate 是什么意思?任何具有至少一个负坐标或负坐标的单元格?
  • 任何单元坐标都由 n 个分量组成。 this 表示是否有任何组件为负数。
  • 好的,超立方体的开始结束坐标是什么?我认为超立方体是{0,1}^n(即只有长度为 n 的 0-1 元组)。你对(子)超立方体的定义是什么?
  • 给出了“开始”和“结束”坐标,长度为 n 的 0-1 个元组指的是“单位超立方体”。

标签: algorithm math


【解决方案1】:

这条规则产生一个众所周知的分形 - The Sierpinski triangle

这是它的 2D 图像:

【讨论】:

    【解决方案2】:

    蛮力算法:

    fill the hypercube (the needed part) with value 'unknown'.
    color[00000] = 1  #black
    
    sum = 0
    for each cell in sub-hypercube:
       sum += getcolor(cell)
       return sum
    
    getcolor(cell):
       if color[cell] == unknown
          c = 0  #white
          for each neighbour cell in decreasing direction within non-negative boundary:
              c = c xor getcolor(neighbour)
          color[cell] = c
       return color[cell]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多