处理php

时间:2017-04-24 16:41:51

标签: php algorithm memory

算法:

给定数n,所有大小为n的二进制数的列表(L(n))可以通过以下方式从L(n-1)计算:

  • 假设数组L(n-1)包含长度为n-1的所有二进制数。
  • 反向L(n-1)并调用RL(n-1)。
  • 追加' 0'到L(n-1)中的所有二进制数。追加' 1' RL(n-1)中的所有二进制数。
  • 合并新的附加数组L(n-1)和RL(n-1)以获取大小为n的所有二进制数。
  • 基础案例, 如果n = 1,则输出= [0,1]。

例如,如果n = 2,我们可以通过以下方式获得大小为2的所有二进制数的列表:

  • 设a = [0,1]为大小为(2-1)= 1的二进制数列表。
  • 设b = a = [1,0]的反转。
  • 将0添加到a中的所有元素。新a = [00,11]。
  • 将1添加到b中的所有元素。新b = [11,10]。
  • 合并新的a和b。 [00,11,11,10]。

问题陈述:给定数字n,找到n个二进制数的列表。

解决方案:如果n小于20,则可以使用简单的递归或非递归解决方案。

问题:如果通过更大的数字,我的代码会失败,可以说40并超过内存限制   为什么? - ' Coz对于一个数字可以说40,二进制数的总数将是功率(2,40),这是巨大的(1048576 * 1048576)。 那么,有没有更好的算法或方法来解决上述问题?

1 个答案:

答案 0 :(得分:0)

您可以做的只是存储前import numpy as np import matplotlib.pyplot as plt plt.plot(x,y) 个号码。似乎在每种情况下,您只需要第一个n数字才能反转并附加'1'以获得正确的输出。