我一直在努力为游戏"三重城镇"激发的问题找到最佳算法.游戏如下:
将对象放置在网格中,每次创建一组三个对象时,它们会在放置的最后一个对象的位置压缩为一个更高级别的对象.

此外,如果将这些b对象中的三个放在一起,它们会再次压缩以形成更高级别的对象.


注意:在这些图中,对象的级别表示为i,b i和c i,下标表示三个集合中的对象编号.
为了简化事情,我只考虑你必须放置的每个对象何时是最低级别.
现在我的问题是:
1:给定x,是否有算法确定制作x级对象所需的最小网格区域数量?
例如,对于等级a,您需要1x1,对于等级b,您需要1x3,对于等级c,您需要1x5.
2:鉴于网格的尺寸,我们能找到最高水平和可实现的物体数量吗?
例如,对于2x2,您可以获得2级'a'和2级'b'
3:在给定固定网格的情况下,是否有算法可以找到对象的最佳顺序和位置以获得最高级别?
例如,对于2x2,您可以得到(1,1),(1,2),(2,2)
4:给定一个预期级别x对象的位置,哪组移动最小化了制作此对象所需的空间量?
5:这些算法的最佳复杂性是什么?
更新:
我认为在找到解决方案时突出的一点是,获取x级项目不能在任何任意位置完成.
例如:[ _ _ _ _ c]在固定的1乘5格中是不可能实现的,因为你需要你的最后一个b在第5位,因此你的最后一个在第5位.所以放置第一个b:[a _ _ _ _]->[a a _ _ _]->[_ _ b _ _]或[_ a _ _ _]->[_ a a _ _]->[_ _ _ b _].在这两种情况下,没有足够的空间放置3'a来制作c的最后一个b.
另一件事,我们不能假设任何东西都可以展开到一维网格.我的下一点很明显.
我找到了一些有趣的东西:
边界的最小接近度是c级对象可以在1维网格中.[_ _ a a a]->[_ _ _ b]->[_ a a a …
我是R的新手,我需要绘制二次矩阵方程:
x^T A x + b^T x + c = 0
在R ^ 2中,A是2x2,ba 2x1和ca常数.该等式用于定义点类的边界.我需要绘制边界x0 = -6...6,x1 = -4...6.我的第一个想法是生成一堆点并看到它们在零的位置,但它取决于数字之间的增量(很可能我不会猜测哪些点为零).
有没有一种更好的方法,而不仅仅是生成一堆点,看看它在哪里为零或乘以它?任何帮助将非常感激,
谢谢.
我在将数据集加载到R中的稀疏矩阵时遇到问题.我正在使用Matrix包.我的数据是在表格中x y value.例如:
V1 V2 V3
1 2 .34
7 4 .56
4 5 .62
Run Code Online (Sandbox Code Playgroud)
在哪里我想做相同的
myMatrix[1,2] = .34
myMatrix[7,4] = .56
myMatrix[4,5] = .62
Run Code Online (Sandbox Code Playgroud)
以自动化的方式.
我想做的事情如下:
myMatrix = Matrix(nrow=numrows, ncol=numcols)
myMatrix[mydata[1:numrows, 1], mydata[1:numrows, 2]] <- mydata[1:numrows, 3]
Run Code Online (Sandbox Code Playgroud)
但是当我需要一个数字矩阵时,这会使我的矩阵成为lgeMatrix.
我也尝试过:
myMatrix = Matrix(nrow=numrows, ncol=numcols)
for(i in 1:numrows){
myMatrix[mydata[i, 1], mydata[i, 2]] <- mydata[i, 3]
}
Run Code Online (Sandbox Code Playgroud)
这创造了我想要的那种矩阵,但它需要太长时间(超过5分钟).我知道它有效,因为当我停止它时,我检查前几个值并且它们是正确的,但最后的值是NA.我正在使用7095乘5896矩阵,输入247158值,因此for循环是不可能的,除非我只是不耐烦.
我的问题是:在R中执行此操作的首选方法是什么?
更新:
我用它sparseMatrix代替了:
myMatrix = sparseMatrix(i = mydata[1:numrows,1], j = mydata[1:numrows,2],
x = mydata[1:numrows,3])
Run Code Online (Sandbox Code Playgroud)
不明白sparseMatrix其他帖子的用法