小编Red*_*ift的帖子

使用循环排列来减少旅行商的复杂性

我正在尝试一系列不同的算法来寻找旅行商问题的近似最优解,其中一种方法是蛮力方法 - 检查n个城市之间的每条可能路径,并简单地返回最佳路径.这是一个O(n!)算法,因此很自然地需要很长时间才能执行大量城市.

我想提高我的暴力实施的效率,我注意到的一件事是你不必检查城市的一个排列.例如,如果您有城市1,2,3和4,则路径(1-2-3-4)与路径(2-3-4-1)的长度相同.路径(3-4-1-2)和(4-1-2-3)也是如此.通过利用这一事实,我们应该能够将蛮力算法的复杂性从O(n!)降低到O((n-1)!),甚至O((n-1)!/ 2)如果我们意识到所有路径都可以反转而不影响它们的长度.

基本上,我正在寻找一种能够从一组不同的整数生成循环排列的算法.如果算法将"镜像"排列视为等效(例如1-2-3和3-2-1是相同的,因此只需要其中一个),这也是很好的.有谁知道这样做的方法?Java实现会很精彩,但我会采取任何措施!

java algorithm circular-permutations

11
推荐指数
1
解决办法
1204
查看次数

将.Rd文件转换为纯文本

我正在尝试将R文档文件(扩展名.Rd)转换为纯文本.我知道RdUtils包含一个名为Rdconv的工具,但据我所知它只能在命令行中使用.有没有办法从R会话中访问Rdconv(或类似的转换工具)?

r plaintext rd

6
推荐指数
2
解决办法
649
查看次数

具有任意维度的 Cython ndarray

我正在编写一些需要能够处理具有任意维数的 NumPy ndarray 的 Cython 代码。目前,我只有不同的函数来接受不同大小的 ndarrays,有点像:

def func1(np.ndarray[DTYPE_float64_t, ndim=1] arr):
    # Do something with the 1-D ndarray.

def func2(np.ndarray[DTYPE_float64_t, ndim=2] arr):
    # Do something with the 2-D ndarray.

def func3(np.ndarray[DTYPE_float64_t, ndim=3] arr):
    # Do something with the 3-D ndarray.
Run Code Online (Sandbox Code Playgroud)

但是我想编写一个以任意维度的 ndarray 作为参数的通用函数。我试着简单地忽略“ndim”参数,但是 Cython 假设 ndim=1,这不好。

有没有办法做到这一点,还是我只需要为每个维数编写一个函数?

python numpy cython

6
推荐指数
1
解决办法
326
查看次数

将频率矩阵转换为R中的有序对列表

假设我有一个3x3的频率值矩阵.此矩阵中的每个单元格表示在某个位置检测到的实体数量(有关这些位置的详细信息对我们的目的无关紧要).例如,在第1行第1列中检测到0个实体; 在第2行第3列中检测到3个实体; 等等

     [,1] [,2] [,3]
[1,]    0    1    0
[2,]    1    2    3
[3,]    0    1    1
Run Code Online (Sandbox Code Playgroud)

我想将此矩阵转换为nx2数据帧,其中n是在所有位置检测到的实体总数.在这种情况下,应该有9行,因为总共检测到9个实体.在我们创建的数据框中,第1列应包含实体的行索引,第2列应包含实体的列索引.

我们可以使用以下代码来完成此任务,但对于较大的矩阵,此方法非常慢.

mat <- matrix(c(0,1,0,1,2,3,0,1,1), nrow = 3, byrow = TRUE)
x <- rep(NA, 9)
y <- rep(NA, 9)
count <- 0
for(i in 1:3){
    for(j in 1:3){
        while(mat[i,j] > 0){
            count <- count + 1
            x[count] <- i
            y[count] <- j
            mat[i,j] <- mat[i,j] - 1
        }
    }
}
df <- data.frame(x, y)
Run Code Online (Sandbox Code Playgroud)

此代码为我们提供了以下9x2数据框:

x  y
1  2
2  1
2 …
Run Code Online (Sandbox Code Playgroud)

r matrix

2
推荐指数
1
解决办法
1011
查看次数

标签 统计

r ×2

algorithm ×1

circular-permutations ×1

cython ×1

java ×1

matrix ×1

numpy ×1

plaintext ×1

python ×1

rd ×1