Python 如何在给定图元数量的情况下最大化网格尺寸

Python 如何在给定图元数量的情况下最大化网格尺寸,python,maximize,Python,Maximize,我有n元素作为输入,还有一个函数生成网格(n),它将计算包含元素的网格的尺寸。假设n=12,那么函数必须计算宽度为4,高度为3,而不是1和12左右。类似地,n=24应该返回6和4 我试图使用ceil(sqrt(n))来获得一维,但这根本不是一般情况,而且玩cases(n偶数,sqrt(n)==ceil(sqrt(n)))也不起作用 编辑: 我已经看到了这个问题,但是编码让我想到了n=24维5和5维。 有什么帮助吗?您正在寻找将n平均分割的数字,因此需要计算n的因子,并取最接近sqrt(n)的两个

我有
n
元素作为输入,还有一个函数
生成网格(n)
,它将计算包含元素的网格的尺寸。假设
n=12
,那么函数必须计算宽度为4,高度为3,而不是1和12左右。类似地,
n=24
应该返回6和4

我试图使用
ceil(sqrt(n))
来获得一维,但这根本不是一般情况,而且玩cases(n偶数,
sqrt(n)==ceil(sqrt(n))
)也不起作用

编辑: 我已经看到了这个问题,但是编码让我想到了n=24维5和5维。
有什么帮助吗?

您正在寻找将
n
平均分割的数字,因此需要计算
n
的因子,并取最接近
sqrt(n)
的两个。一个是小于或等于
sqrt(n)
(称之为
f
)的最大因子,另一个是
n/f


然而,对于许多数字,如74或任何素数,您会得到奇怪的网格。

您正在寻找整数分解算法

请点击此处:

在这里:


然后选择一对最符合你目标的因素。

方法如下:

将整数
n
作为函数的输入。目标是获得“最平方”表。正如@John所建议的,我们必须计算
sqrt(n)
来了解维度。另一方面,我们必须计算
n
的所有因子,以便选择与
sqrt(n)
最近的因子

我们如何选择最接近的低值?我们可以使用这个技巧(Python):获取除数列表中最近值的索引,比如说
hIndex
。 然后,可以计算另一个维度,将
n
除以
除数[hIndex]
,或者使用新索引
wIndex=hIndex+1
,得到
除数[wIndex]

Python代码如下(注意,我使用了一个惰性求值来查找除数):


事实上,你是对的。如果数字与系数相差很远,则表格将过长或过高。我会使用一些屏幕上显示的数字,所以这不是问题。然而,我会考虑因素和
srqt(n)
idea。假设n=50,地板(qrt(50))=7,但7不是因素D:你是对的。不是。不过,这不是我的建议。50的系数为1、2、5、10、25和50。因此,与
sqrt(50)
最接近的两个因子是5和10,给你一个5 x 10或10 x 5的网格。好的,我明白你的意思,我必须在问任何问题之前仔细阅读答案。谢谢你的耐心,我知道了你的解决方案。我不知道这句话是否用英语说得很好,但我真正关注的不是
n
的“因子”,而是
n
import numbers
from math import sqrt

def get_dimensions(n):
    tempSqrt = sqrt(n)
    divisors = []
    currentDiv = 1
    for currentDiv in range(n):
        if n % float(currentDiv + 1) == 0:
         divisors.append(currentDiv+1)
    #print divisors this is to ensure that we're choosing well
    hIndex = min(range(len(divisors)), key=lambda i: abs(divisors[i]-sqrt(n)))
    wIndex = hIndex + 1

   return divisors[hIndex], divisors[wIndex]