当前位置: 首页 > 知识库问答 >
问题:

具有k个1的秩和非秩fibonacci比特序列

谭志用
2023-03-14

对于正整数n和k,设“n的k-fibonacci位序列”为k1的位序列,其中索引i上的1描述不数学。pow(2,i)但是Fibonacci(i)。这些正整数加起来等于n,并让给定的k-fibonnaci位序列n的“秩”作为其在所有这些fibonacci位序列的排序列表中的位置,以字典顺序从0开始。

例如,对于数字39,我们有以下有效的k-斐波那契-比特序列,k

34 21 13 8 5 3 2 1代码

k=2秩=0

01101000k=3秩=0

k=3秩=1

01101100k=4秩=0

所以,我想做两件事:

  • 给定n,k和n的k-斐波那契-比特序列,我想找到n的k-斐波那契-比特序列的秩。
  • 给定n,k和秩,我想找到n的k-斐波那契-比特序列。

我可以不用计算n的所有k-fibonacci位序列就可以做到这一点吗?

共有1个答案

岳凯康
2023-03-14

为了简洁起见,让我们说»k-fbs of n«而不是»k-fibonacci-bitsequences of n«。

我能在不计算n的所有k-fb的情况下完成这项工作吗?

我不确定。到目前为止,我仍然需要计算一些fbs。然而,你可能认为我们必须从00开始...0并向上计数——事实并非如此。我们可以反过来做,从最高的fbs开始,非常有效地向下计算。

这不是一个完整的答案。然而,有一些观察结果可以帮助你:

在下面的伪代码中,我们使用数据类型的fbs,它基本上是一个布尔数组。我们可以使用mySeq[i]读写单个位,其中biti表示Fibonacci数fib(i)。就像在你的问题中一样,位myFbs[0]myFbs[1]不存在。默认情况下,所有位都初始化为0。可以在没有[]的情况下使用fbs来读取所表示的数字(n)。助手函数#(fbs)返回fbs中设置的位数(k)。n=7的例子:

  fbs        meaning       representation    helper functions 
1 0 1 0
| | | `— 0·fib(2) = 0·1 ——— myFbs[2] = 0      #(myFbs) == 2 
| | `——— 1·fib(3) = 1·2 ——— myFbs[3] = 1        myFbs  == 7
| `————— 0·fib(4) = 0·3 ——— myFbs[4] = 0
`——————— 1·fib(5) = 1·5 ——— myFbs[5] = 1

对于任何给定的n,我们可以很容易地计算n的字典最大值(横跨所有k个),因为这个fbs碰巧是n的泽肯多夫表示。

function zeckendorf(int n) returns (fbs z):
1  int i := any (ideally the smallest) number such that fib(start) > n
2  while n-z > 0
3  |  if fib(i) < n
4  |  |  z[i] := 1
5  |  i := i - 1

zeckendorf(n)是唯一的,并且是唯一一个具有k=#(zeckendorf(n))的fbs。因此zeckendorf(n)的秩=0。此外,不存在带k'的n的k'-fbs

任何一个n的k-fbs都可以转换成n的(k1)-fbs,方法是在fbs内部的任何位置用011替换比特序列100。这是因为fib(i)=fib(i-1)fib(i-2)。
如果我们输入n的k-fbs的秩=0,并且我们替换最右边的100,那么我们得到的n的(k1)-fbs的秩=0。如果我们替换最右边的100,我们得到的(k1)-fbs的秩=1,依此类推。

您应该能够使用从zeckendorf(n)开始的重复转换来回答这两个问题。对于第一个问题,只看k-稳定变换就足够了→<代码>100…011100…011→<代码>011…100给定fbs(想想这些转换对排名有什么影响)。

 类似资料:
  • 我想用元素距离约束对组合进行排序和取消排序。选定的元素不能重复。 例如: 元素从中选择 正在选择的元素 2个选择元素之间的最大距离 与约束匹配 与约束不匹配 在给定距离约束下,小于,如何对组合进行排序?有没有一种方法可以在不计算较小秩的组合的情况下进行排序?

  • 对于正整数n和k,让“n的k-分区”是k个加起来等于n的不同正整数的有序列表,让给定n的k-分区的“秩”是它在所有这些列表的有序列表中的位置,从0开始。 例如,有两个5(n)的2分区 所以,我想做两件事: 给定n,k和n的k-划分,我想求n的k-划分的秩。 给定n,k和一个秩,我想找到n的k-划分 我能做到这一点,而不必计算n的所有k-划分,在感兴趣的k-划分之前吗? 这个问题与其他问题不同,因为

  • 我在WooCommerce开发一个网店(v 2.4.6)。在本地机器上,WooCoommerce使用密钥和订单标识创建订单。 当我把代码放在实时环境中时,WooCommerce不会创建订单密钥并给出错误 在错误的地方有这样的代码: 函数“wc_get_order($order_id)”在创建订单后获取订单,并返回订单对象。 所以我猜WooCommerce不会在结帐过程后创建订单。有没有人经历过这个

  • 假设我有两个外部服务。假设我们有一个item,serviceA返回item,serviceB返回item。 我想要得到的是形式的处理程序,其中和是同一查询项的对应对象。 是迄今为止我找到的最接近的东西,但它不是我想要的东西,因为订单没有promise。我在寻找像CompletableFuture::allOf这样的东西 我总是可以通过使这两个调用同步来作弊,但这会让反应式编程失去所有乐趣。或者,我

  • 我试图在Keras中创建一个带有输入(批次、通道(3)、64、32)的神经网络,但我使用批次标准化时出现了错误(因为错误从提到的层开始,我选择隔离导致错误的部分)。模型开始如下: 我收到以下异常: 对于输入形状为[1,32,1,1],“batch\u normalization\u 1/cond/Reformate\u 4”(操作:“Reformate”)的形状必须为秩1,但为秩0。 我认为数据从

  • 假设我的使用者从一个代理轮询,该代理有多个主题,每个主题有多个分区。我在同一个消费群体中总共有5个消费者。如果我的每个消费者都进行投票,将返回的数据顺序是什么? topicD-分区5 我的问题是,在这个单一的1轮询中,在按顺序移动到下一个主题/分区之前,我会收到来自该主题/分区的所有可用消息吗?意思例如: 在一次投票循环中,我收到了这个... 或者在那个单一的1轮询循环中,有可能接收到这个消息顺序