Tag: 排列

代码高尔夫:倒计数游戏

挑战 英国着名电视游戏节目“ 倒计时”的启发,这是一项任务。 即使没有任何关于游戏的知识,挑战应该是非常清楚的,但是可以随时要求澄清。 如果你想看看这个游戏的剪辑,看看这个YouTube剪辑 。 它在1997年以奇妙的理查德·怀特利为特色。 给你6个数字,从集合{1,2,3,4,5,6,8,9,10,25,50,75,100}中随机select,以及100和999之间的随机目标数字。其目的是使用六个给定的数字和四个常用的算术运算(加,减,乘,除;全部有理数)来生成目标 – 或尽可能接近两侧。 每个数字最多只能使用一次,而每个算术运算符可以使用任意次数(包括零)。请注意,使用多less个数字并不重要。 编写一个采用目标编号和6个数字组(可以表示为list / collection / array / sequence)的函数,并以任何标准数字符号(例如中缀,前缀,后缀)返回解。 该function必须始终将最接近可能的结果返回给目标 ,并且必须在标准PC上最多运行1分钟。 请注意,在存在多个解决scheme的情况下,任何单个解决scheme都是足够的。 例子: {50,100,4,2,2,4},目标203 例如100 * 2 + 2 +(4/4) (确切) 例如(100 + 50)* 4 * 2 /(4 + 2) (确切的) {25,4,9,2,3,10},目标465 例如(25 + 10 – 4)*(9 * 2 – 3) (确切) {9,8,10,5,9,7},目标241 例如((10 + 9)* […]

生成所有5张牌扑克牌

这个问题乍一看听起来很简单,但是看起来比现在复杂得多。 这让我难以忍受。 有52c5 = 2,598,960种方式从52张牌组中select5张牌。 然而,由于套装在扑克中是可以互换的,其中许多是等价的 – 手牌2H 2C 3H 3S 4D相当于2D 2S 3D 3C 4H – 简单地交换套装。 根据维基百科 ,一旦你考虑可能的西装颜色,有134459个不同的5张牌。 问题是,我们如何有效地产生所有这些可能的手? 我不希望产生所有的手,然后消除重复,因为我想将问题应用到更大数量的牌上,并且手的数量要评估快速螺旋失控。 我目前的尝试主要集中在深度优先生成和跟踪当前生成的卡片上,以确定下一张卡片或宽度优先的卡片和行列是否有效,生成所有可能的下一张卡片,然后通过转换每个卡片来删除重复通过重新着色来达到“规范”版本。 以下是我在Python中的广度优先解决scheme的尝试: # A card is represented by an integer. The low 2 bits represent the suit, while # the remainder represent the rank. suits = 'CDHS' ranks = '23456789TJQKA' def make_canonical(hand): suit_map […]

Android按属性排列数组列表

我想通过属性对ArrayList进行sorting。 这是我的代码… public class FishDB{ public static Object Fish; public ArrayList<Fish> list = new ArrayList<Fish>(); public class Fish{ String name; int length; String LatinName; //etc. public Vis (String name) { this.name = name; } } public FishDB() { Fish fish; fish = new Fish("Shark"); fish.length = 200; fish.LatinName = "Carcharodon Carcharias"; fish = new Fish("Rainbow […]

如何判断一个数组是否是O(n)中的一个置换?

input:包含从1到N的整数值的N个元素的只读数组(某些整数值可以多次出现!)。 和一个固定大小的存储区(10,100,1000等 – 不依赖于N)。 如何判断O(n)是否代表排列? – 我到目前为止所取得的成绩(答案certificate这不好): – 我使用有限的内存区域来存储数组的总和和乘积。 我把这个和与N *(N + 1)/ 2和N的乘积进行比较! 我知道,如果条件(2)是真的,我可能有一个排列。 我想知道是否有办法certificate条件(2)足以说明我是否有一个置换。 到目前为止,我还没有想出这个…

洗牌vs排列numpy

numpy.random.shuffle(x)和numpy.random.permutation(x)什么numpy.random.permutation(x) ? 我已经阅读了文档页面,但我不明白两者之间是否有任何区别,我只是想随机洗牌数组的元素。 更确切地说,假设我有一个数组x=[1,4,2,8] 。 如果我想生成x的随机排列,那么shuffle(x)和permutation(x)之间的区别是什么?

用python重复生成排列

我知道itertools,但它似乎只能生成排列而不重复。 例如,我想生成所有可能的骰子掷2个骰子。 所以我需要[1,2,3,4,5,6]的大小2的所有排列,包括重复:(1,1),(1,2),(2,1)…等 如果可能的话,我不想从头开始实施

有没有更好的方法来排列string?

void permute(string elems, int mid, int end) { static int count; if (mid == end) { cout << ++count << " : " << elems << endl; return ; } else { for (int i = mid; i <= end; i++) { swap(elems, mid, i); permute(elems, mid + 1, end); swap(elems, mid, i); } } […]

find第n个排列而不计算其他排列

给定一个代表置换primefaces的N个元素的数组,是否有这样的algorithm: function getNthPermutation( $atoms, $permutation_index, $size ) 其中$atoms是元素数组, $permutation_index是$permutation_index的索引, $size是置换的大小。 例如: $atoms = array( 'A', 'B', 'C' ); // getting third permutation of 2 elements $perm = getNthPermutation( $atoms, 3, 2 ); echo implode( ', ', $perm )."\n"; 将打印: B, A 没有计算每个排列直到$ permutation_index? 我听说了一些事实上的排列,但是我发现每个实现都给出了与V相同的排列,这不是我的情况。 谢谢。

为什么Python的itertools.permutations包含重复项? (当原始列表重复时)

普遍认为,n个不同符号的列表有n! 排列。 但是,当符号不明确时,在math和其他地方最常见的惯例似乎是只计算不同的排列。 因此,列表[1, 1, 2] 1,1,2 [1, 1, 2]的排列通常被认为是 [1, 1, 2], [1, 2, 1], [2, 1, 1] 。 事实上,下面的C ++代码正好打印出这三个: int a[] = {1, 1, 2}; do { cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl; } while(next_permutation(a,a+3)); 另一方面,Python的itertools.permutations似乎打印别的东西: import itertools for a in itertools.permutations([1, 1, 2]): print a 这打印 (1, 1, 2) (1, 2, 1) (1, 1, […]

快速排列 – >数字 – >置换映射algorithm

我有n个元素。 举例来说,我们说7个元素1234567.我知道有7个元素! 这7个元素可能有5040个排列组合。 我想要一个包含两个函数的快速algorithm: f(数字)将0到5039之间的数字映射到一个唯一的排列, f'(排列)将排列映射回其生成的数字。 我并不关心数字与排列之间的对应关系,只要每个排列都有自己独特的数字。 所以,例如,我可能有function在哪里 f(0) = '1234567' f'('1234567') = 0 想到的最快的algorithm是枚举所有排列并在两个方向上创build一个查找表,所以一旦创build表,f(0)将是O(1),f('1234567')将是在一个string上查找。 但是,这是一个饥饿的记忆,特别是当n变大的时候。 任何人都可以提出另一种algorithm,快速工作,没有内存的缺点?