- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有 36 个人和 6 张 table 。我想围绕每张 table 组成 6 个小组。然后再组成 6 个其他组,再组成 6 个其他组……直到每个人都遇到每个人,但没有人遇到两次。
到目前为止,我想出了这个脚本,但它会产生重复:
people = [ [1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24],[25,26,27,28,29,30],[31,32,33,34,35,36] ]
def perm():
z = 0
for X in people:
for r in range(0,z):
f = X.pop()
X.insert(0,f)
z +=1
def calcul():
for q in range(0,6):
table_1 = []
table_2 = []
table_3 = []
table_4 = []
table_5 = []
table_6 = []
for r in range(0,6):
table_1.append(people[r][0])
table_2.append(people[r][1])
table_3.append(people[r][2])
table_4.append(people[r][3])
table_5.append(people[r][4])
table_6.append(people[r][5])
print(table_1)
print(table_2)
print(table_3)
print(table_4)
print(table_5)
print(table_6)
print '--'
perm()
calcul()
输出是:
[1, 7, 13, 19, 25, 31]
[2, 8, 14, 20, 26, 32]
[3, 9, 15, 21, 27, 33]
[4, 10, 16, 22, 28, 34]
[5, 11, 17, 23, 29, 35]
[6, 12, 18, 24, 30, 36]
--
[1, 12, 17, 22, 27, 32]
[2, 7, 18, 23, 28, 33]
[3, 8, 13, 24, 29, 34]
[4, 9, 14, 19, 30, 35]
[5, 10, 15, 20, 25, 36]
[6, 11, 16, 21, 26, 31]
--
[1, 11, 15, 19, 29, 33]
[2, 12, 16, 20, 30, 34]
[3, 7, 17, 21, 25, 35]
[4, 8, 18, 22, 26, 36]
[5, 9, 13, 23, 27, 31]
[6, 10, 14, 24, 28, 32]
--
[1, 10, 13, 22, 25, 34]
[2, 11, 14, 23, 26, 35]
[3, 12, 15, 24, 27, 36]
[4, 7, 16, 19, 28, 31]
[5, 8, 17, 20, 29, 32]
[6, 9, 18, 21, 30, 33]
--
[1, 9, 17, 19, 27, 35]
[2, 10, 18, 20, 28, 36]
[3, 11, 13, 21, 29, 31]
[4, 12, 14, 22, 30, 32]
[5, 7, 15, 23, 25, 33]
[6, 8, 16, 24, 26, 34]
--
[1, 8, 15, 22, 29, 36]
[2, 9, 16, 23, 30, 31]
[3, 10, 17, 24, 25, 32]
[4, 11, 18, 19, 26, 33]
[5, 12, 13, 20, 27, 34]
[6, 7, 14, 21, 28, 35]
--
谁能解释一下为什么?也许如何得到结果?非常感谢!
最佳答案
Edit: It appears the following algorithm works only for
odd NEdit2: I've updated the code to include an automated test of the requirements. This algorithm only works if N is prime You can verify this by running the program with any prime number for N, and its odd successor, e.g. 53 and 55 (comment out
print_table_perms
in this case!)Edit3: Apparently this is a famous open problem in Mathematics https://math.stackexchange.com/questions/924326/diner-permutations
要满足大家坐在一起,而且绝不会和同一个人坐两次,需要N+1轮。
我通过在纸上用 N=3 计算出以下算法
1 2 3
4 5 6
7 8 9
--
1 5 9
4 8 3
7 2 6
--
1 8 6
4 2 9
7 5 3
--
1 4 7
2 5 8
3 6 9
--
该算法的工作原理如下:在每一轮 i
中,通过从当前 第 0
元素追踪对角线来构建行 j
行,沿对角线环绕。您可以在前三轮中直观地跟踪这一点。最后一轮是初始矩阵的转置,因为这些“列”永远没有机会混合。在下面的程序中,我们首先打印转置。
代码如下:
from copy import deepcopy
def gen_tables(N):
tables = []
x = 1
for i in xrange(N):
tables.append(range(x, x + N))
x += N
return tables
def print_tables(tables):
for table in tables:
print " ".join(map(str, table))
print
def print_table_perms(perms):
for perm in perms:
print_tables(perm)
def gen_table_perms(tables):
perms = []
N = len(tables[0])
for table in tables:
assert(len(table) == N)
# first, add the "columns", who won't be mixed together
perms.append(map(list, zip(*tables)))
current_tables = deepcopy(tables)
next_tables = deepcopy(tables)
# next, mix the columns with a diagonal shift (mod N)
for i in xrange(N):
perms.append(deepcopy(current_tables))
for j in xrange(N):
for k in xrange(N):
next_tables[j][k] = current_tables[(j + k) % N][k]
(current_tables, next_tables) = (next_tables, current_tables)
return perms
def verify_table_perms(perms):
N = len(perms[0][0])
expect = set((x for x in xrange(1, N * N + 1)))
v = {}
for i in xrange(1, N * N + 1):
v[i] = set((i,))
for perm in perms:
for table in perm:
for seat in table:
v[seat].update(table)
for s in v.values():
assert s == expect, s
tables = gen_tables(6)
perms = gen_table_perms(tables)
verify_table_perms(perms)
print_table_perms(perms)
这是这个程序的输出:
1 7 13 19 25 31
2 8 14 20 26 32
3 9 15 21 27 33
4 10 16 22 28 34
5 11 17 23 29 35
6 12 18 24 30 36
--
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
--
1 8 15 22 29 36
7 14 21 28 35 6
13 20 27 34 5 12
19 26 33 4 11 18
25 32 3 10 17 24
31 2 9 16 23 30
--
1 14 27 4 17 30
7 20 33 10 23 36
13 26 3 16 29 6
19 32 9 22 35 12
25 2 15 28 5 18
31 8 21 34 11 24
--
1 20 3 22 5 24
7 26 9 28 11 30
13 32 15 34 17 36
19 2 21 4 23 6
25 8 27 10 29 12
31 14 33 16 35 18
--
1 26 15 4 29 18
7 32 21 10 35 24
13 2 27 16 5 30
19 8 33 22 11 36
25 14 3 28 17 6
31 20 9 34 23 12
--
1 32 27 22 17 12
7 2 33 28 23 18
13 8 3 34 29 24
19 14 9 4 35 30
25 20 15 10 5 36
31 26 21 16 11 6
--
Edit2:通过自动化测试,这是输出
Traceback (most recent call last):
File "table_perms.py", line 65, in <module>
verify_table_perms(perms)
File "table_perms.py", line 61, in verify_table_perms
assert s == expect, s
AssertionError: set([1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 17, 18, 19, 20, 22, 24, 25, 26, 27, 29, 30, 31, 32, 36])
Python 确实有 itertools.permutations
, 但在这种情况下它不是很有用,因为我们不想要 所有 排列,我们只想要一组满足要求的排列。
关于 python : speed dating & permutation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25732400/
好吧,我是编程新手,我想知道如何打印某些字段的值。例如,我有一个速度,单位是节(21 节),如何将“节”部分添加到我的代码中,这样我就不会只打印整数?我希望它有 [number] 节。这是我到目前为止
我正在研究堆算法。 我认为堆算法作为函数会比纯代码慢。 所以我做了一个测试。但我发现函数式代码比纯代码快得多。 我觉得这很奇怪,我不知道为什么。 enter image description her
除了明确的清晰度,我们为什么要坚持:car.getSpeed()和 car.setSpeed(55)当这也可以使用时:car.speed()和 car.speed(55) 我知道 get() 和 se
我正在尝试实现 google speed limit API 来计算从一个位置到另一个位置所需的最低速度。但是当我在浏览器中运行时出现以下错误。 谁能帮我解决这个问题?谢谢 "error": {
我正在创建一个 LAN 速度测试,它在指定位置创建一个指定大小的数据文件,并记录创建/读取它的速度。在大多数情况下,这是正常工作的,只有一个问题:读取速度快得离谱,因为它所做的只是计算文件打开所需的时
我有以下函数,它会为生成的每个订单项调用。有谁知道如何加快速度? private String getDetails(String doc){ String table=""; jav
我正在尝试使用 C#、sdl.net 开发一个简单的 2d 赛车游戏(自上而下查看)。现在,我正在尝试管理我的车的速度、加速度和刹车。我的问题是算法。我的循环 (Events_Tick) 每秒执行 5
我正在读取一个包含 500000 行的文件。我正在测试多线程如何加速进程.... private void multiThreadRead(int num){ for(int i=1; i"+
Java Robot 类允许移动鼠标,就好像移动了实际的物理鼠标一样。 但是,如何以人性化(而非即时)的方式将鼠标从 Point1 移动到 Point2?也就是说,如何设置移动速度? 如果Robot类
我无法找到有关此主题的现有答案。 我正在运行一个连接到远程 redis 服务器(不在同一主机上)的 redis 客户端。 我可以通过域名或服务器的 IP 连接,即我可以通过 redis-cli -h
我正在尝试将 GPS 功能添加到我的 iPhone 应用程序中。这是一款在步行或运行时使用的锻炼应用程序。所以我想使用 GPS 来显示人的移动速度(以英里/小时和分钟/英里为单位)。 我应该如何配置
所以我有一个以“速度”移动的对象,现在我设置了代码,当该对象与另一个对象碰撞时,该对象的速度会降低。我尝试通过改变速度来实现这一点,当速度在 3 秒后改变时,将其改回原来的速度。 这是我自己尝试过的,
这是我的 table : CREATE TABLE `tab_adasf` ( `adasf_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
我正在寻找一种加速文件加载的方法: 数据包含约100万行,制表符以“\t”(tabulation char)分隔,utf8编码,使用以下代码解析完整文件大约需要9秒。但是,我希望几乎是一秒钟! def
我创建了一个 python 程序,该程序使用 ArcGIS 的“CostPath”函数在 shapefile“selected_patches.shp”中包含的几个多边形之间自动构建最低成本路径
我有 36 个人和 6 张 table 。我想围绕每张 table 组成 6 个小组。然后再组成 6 个其他组,再组成 6 个其他组……直到每个人都遇到每个人,但没有人遇到两次。 到目前为止,我想出了
我正在努力提高我的 Google Page Speed 得分。目前移动设备为 51/100,桌面设备为 83/100。 其中一个问题是“消除首屏内容中阻止渲染的 JavaScript 和 CSS”。适
所以我在几个小时内一直在寻找为什么我的 iPhone 应用程序讨厌我。这是我得到的错误:警告:“speedView”的局部声明隐藏了实例变量。这是我的 .m 文件 @implementation Ma
我最近做了一个网站,但加载速度很慢。我的 Firebug 页面速度得分是 82/100。我觉得这很好。我的网站有 2 个图像,它们有 100KB 和一些其他小图像,用于子弹、箭头和不超过 50KB 的
我正在用 python 构建词形还原器。因为我需要它实时运行/处理相当大量的数据,所以处理速度是最重要的。数据:我有所有可能的后缀,这些后缀链接到它们可以组合的所有词类型。此外,我还有与其词型和引理相
我是一名优秀的程序员,十分优秀!