标签: permutation

运算符和操作数的排列算法

我在一个访谈网站上遇到了这个问题 - 我们给了4个数字说n1,n2,n3,n4.我们可以按任意顺序放置它们,我们可以在它们之间使用数学运算符+, - ,*,/来得到最终结果为24.为此编写一个算法 - 它将需要4个数字并返回false或true结果24可以任意组合.可以多次使用相同的运算符.

其中一种方法是 -

  1. 置换运营商
  2. 置换操作数
  3. 将每个排列应用于2.中的每个排列.

这种解决方案是强力的,不是最佳解决方案.我认为使用二叉搜索树可能有更好的解决方案.

language-agnostic algorithm permutation

12
推荐指数
1
解决办法
3171
查看次数

按位移位以在C中生成所有可能的排列

可能重复:
创建具有特定位数的多个数字

我正在尝试编写一些代码,通过将位移位来将每个可能的数字组合放在一个数组中.

例如,我想找到数组应该包含的3位(最大数字可以是6)的所有可能组合:

000111
001011
001101
001110
010011
010101
010110
011001
011010
011100
100011

等等...

根据我的解释,当最后一个位置为1时,我们将数字移1(x >> 1)并在开始时加1.但是,我不确定如何编写其余的代码.我用C来写这个.

另外 - 据我所知,这是一个colex序列,但是,如果有另一个序列可以给我相同的最终结果(具有约束为N的k位的所有可能组合的数组),我都是耳朵. .

c algorithm combinations bit-manipulation permutation

12
推荐指数
1
解决办法
7280
查看次数

排列的堆算法

我正在准备采访,我正在努力记住Heap的算法:

procedure generate(n : integer, A : array of any):
    if n = 1 then
          output(A)
    else
        for i := 0; i < n; i += 1 do
            generate(n - 1, A)
            if n is even then
                swap(A[i], A[n-1])
            else
                swap(A[0], A[n-1])
            end if
        end for
    end if
Run Code Online (Sandbox Code Playgroud)

该算法非常着名,可以生成排列.它简洁快速,与代码密切配合,生成组合.

问题是:我不喜欢记住事情,我总是试图让概念在以后"推断"算法.

这个算法真的不直观,我找不到解释它如何对我自己起作用的方法.

有人可以告诉我为什么以及如何在生成排列时该算法按预期工作?

language-agnostic algorithm permutation pseudocode

12
推荐指数
1
解决办法
4705
查看次数

F#中的组合和排列

我最近为F#项目编写了以下组合和排列函数,但我很清楚它们远未优化.

/// Rotates a list by one place forward.
let rotate lst =
    List.tail lst @ [List.head lst]

/// Gets all rotations of a list.
let getRotations lst =
    let rec getAll lst i = if i = 0 then [] else lst :: (getAll (rotate lst) (i - 1))
    getAll lst (List.length lst)

/// Gets all permutations (without repetition) of specified length from a list.
let rec getPerms n lst = 
    match n, lst with
    | 0, _ -> …
Run Code Online (Sandbox Code Playgroud)

f# combinations permutation combinatorics

11
推荐指数
2
解决办法
4425
查看次数

字符串的排列:如何删除重复的排列?

这是打印字符串字符排列的标准函数:

void permute(char *a, int i, int n)
{
   int j;
   if (i == n)
     printf("%s\n", a);
   else
   {
        for (j = i; j < n; j++) //check till end of string
       {
          swap((a+i), (a+j));
          permute(a, i+1, n);
          swap((a+i), (a+j)); //backtrack
       }
   }
} 

void swap (char *x, char *y)
{
    char temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但有一个问题,它还打印一些重复的排列,exapmle:

如果字符串是"AAB"

输出是:

AAB
ABA
AAB
ABA
BAA
BAA
Run Code Online (Sandbox Code Playgroud)

这也有3个重复的条目.

有没有办法防止这种情况发生?

-

谢谢

Alok Kr.

c c++ algorithm permutation

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

费雪耶茨变异

经典的Fisher Yates看起来像这样:

void shuffle1(std::vector<int>& vec)
{
    int n = vec.size();
    for (int i = n - 1; i > 0; --i)
    {
        std::swap(vec[i], vec[rand() % (i + 1)]);
    }
}
Run Code Online (Sandbox Code Playgroud)

昨天,我错误地"向后"实现了迭代:

void shuffle2(std::vector<int>& vec)
{
    int n = vec.size();
    for (int i = 1; i < n; ++i)
    {
        std::swap(vec[i], vec[rand() % (i + 1)]);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个版本是否比第一个版本更糟(或更好)?它是否会扭曲由此产生的概率?

c++ algorithm shuffle probability permutation

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

Excel vba创建Range的每个可能组合

我有一个问题,我无法在网上的任何地方找到它(它可能在那里,但我找不到它,嘿).

我有一个包含13列数据的电子表格.每列都包含需要进入整个测试用例的参数变体.

所有这些都不一样,比如

E:
101%
105%
110%
120%

J:
Upper S
Upside L
Downside B
Premium V.

我已经看到了使用嵌套循环的组合问题的几种解决方案.我想避开13个嵌套循环(但这是我目前最好的选择).我对如何在每列中生成每个独特组合感到茫然.

我不确定这对你们是否足够有意义.我希望有人能够通过递归算法至少指出我正确的方向.我想让它足够动态,可以使用不同数量的列和行.

感谢你们给我的任何帮助.

excel vba static-methods combinations permutation excel-vba

11
推荐指数
3
解决办法
7万
查看次数

PHP Dart游戏计算性能缓慢

我已经根据分数计算了一次计算.

例如,如果分数当前为140,则该类返回一个包含可能抛出的集合的数组:

[10] => Array
    (
        [0] => T18
        [1] => T18
        [2] => D16
    )

[11] => Array
    (
        [0] => T18
        [1] => T16
        [2] => D19
    )

[13] => Array
    (
        [0] => T17
        [1] => T17
        [2] => D19
    )

[14] => Array
    (
        [0] => 50
        [1] => 50
        [2] => D20
Run Code Online (Sandbox Code Playgroud)

但计算这样的事情是相当缓慢的.有什么方法可以优化这个课程吗?

<?php
/**
 * PHP Dartgame calculating class
 * @author Youri van den Bogert
 */

class Darts {

    /**
     * @var string
     */ …
Run Code Online (Sandbox Code Playgroud)

php class permutation

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

打印出阵列的所有排列

我正在研究一个程序,我有一个函数可以交换用户输入的长度数组中的位置.但是,我想弄清楚如何打印出这个函数调用N!times,列出函数中的所有排列.

我的置换函数代码是:

static void nextPerm(int[] A){
    for( int i = (n-1); i > 0; i-- ){
        if( A[i] < A[i+1] ){
            A[i] = pivot;
            continue;
        }
        if( A[i] >= A[i+1] ){
            reverseArray(A);
            return;
        }
    }

    for( int i = n; i > 0; i--){
        if( A[i] > pivot ){
            A[i] = successor;
            continue;
        }
    }

    Swap(pivot, successor);

    int[] B = new int[pivot+1];
    reverseArray(B);

    return;
}
Run Code Online (Sandbox Code Playgroud)

我应该在函数main中编写一个循环,这将打印出来!次?

java arrays algorithm permutation factorial

11
推荐指数
2
解决办法
4万
查看次数

在7个单独的玩具上混合颜色的算法

我是一名木工,试图在这里寻求一些数学和算法帮助.

我正在尝试制作28套七巧板来送亲人,像这样:

在此输入图像描述

DanielHolth + RobotE at nl:Wp [CC BY-SA 3.0(http://creativecommons.org/licenses/by-sa/3.0/)],来自Wikimedia Commons

玩具由7块木板组成,应涂成各种颜色.为了使绘画更容易,我认为最好的方法是将它们分批涂成4组,然后混合它们.

我已经标记了第1-7段,以便更容易讨论:

在此输入图像描述

什么是最有效的混合方式,所以我没有得到相同的颜色组合?我希望礼物尽可能个性化,颜色组合是实现这一目标的好方法.

编辑:每组拼图由七个不同颜色的拼图组成.

algorithm permutation

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