由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一个智力题
相关主题
100%和必需出票属于没戏了问个算法问题
[合集] 微软另一道智力题,求救谁有《algorithms in C》的练习题的答案?
vi怎样对C++头文件进行语法着色?C语言练习题 (转载)
很简单的练习题,不知各位大佬正巧做过或者还有源码?做面试题真的能提高一个人的编程能力和兴趣吗?
请问大家一个图形的问题:问个面试题目
[合集] 问个算法问题[合集] 这个问题怎么做好?(word sqaure)
想练习一下C++[合集] huge map怎么算最短路径?
内存泄露了吗?在2D格子上最短路程的算法问题
相关话题的讨论汇总
话题: 16话题: 智力题话题: 面积话题: 颜色话题: 像素
进入Programming版参与讨论
1 (共1页)
w***g
发帖数: 5958
1
【 以下文字转载自 Mathematics 讨论区 】
发信人: wdong (cybra), 信区: Mathematics
标 题: 请教一个智力题
发信站: BBS 未名空间站 (Sat Apr 25 08:30:55 2015, 美东)
众所周知:包围单位面积的曲线,圆的面积最小。
一个推广的问题:一张面积无穷大的纸,没有边界,需要剪下来面
积相等的n片,每片面积为1,但形状不限。怎么剪使得剪刀走过的长度最小?
n=1的话显然就是圆形最优。如果n=16,怎么剪最好?
已经确定用16个6边形蜂窝装剪比棋盘更好。但蜂窝边界有棱角,显然也不是最优的。
w***g
发帖数: 5958
2
既然贴到这个版来了,就按这个版的规矩来。
因为16片之间共享边的话可以使剪刀的路径减小,所以16片肯定是连在一起的一大片。
稍微跳跃一下,假设这一大片的边界是一个圆。这样就可以用编程的手段来解决这个问
题了。
给定一个参数R,可以算出一个半径为R的(近似的)圆。这个圆内有很多像素。以每个
像素为一个节点,产生一个图。如果两个像素是相邻的(4相邻或者8相邻,作为参数吧
),就在两个对应的节点间连一条边。上面的问题就可以变成一个图着色的问题:
怎样把所有的节点按相同的比例涂上16种颜色(因为无法整除,所以有的颜色的节点会
比别的颜色的节点少1个),使得两个顶点颜色不一样的边的个数最少。
这个问题显然是NP难的。但对于实际问题来说,近似解应该就可以了。
有同学愿意来写这个练习题吗?如果有多于一个同学愿意做练习题的,我可以写程序产生
表述为图着色的input,然后得到output后产生visualization。我们可以比比:
- 谁的算法画出来的图更漂亮,
- 那种语言算得快,
.....
感兴趣的同学请回复。

【在 w***g 的大作中提到】
: 【 以下文字转载自 Mathematics 讨论区 】
: 发信人: wdong (cybra), 信区: Mathematics
: 标 题: 请教一个智力题
: 发信站: BBS 未名空间站 (Sat Apr 25 08:30:55 2015, 美东)
: 众所周知:包围单位面积的曲线,圆的面积最小。
: 一个推广的问题:一张面积无穷大的纸,没有边界,需要剪下来面
: 积相等的n片,每片面积为1,但形状不限。怎么剪使得剪刀走过的长度最小?
: n=1的话显然就是圆形最优。如果n=16,怎么剪最好?
: 已经确定用16个6边形蜂窝装剪比棋盘更好。但蜂窝边界有棱角,显然也不是最优的。

W***o
发帖数: 6519
3
请教大牛: 为什么觉得graph coloring (2 or 3-coloring?) 是这个方向? 以下面的
图为
例子,我看不出来你怎么能切除16片等面积的形状出来。
为什么不可以用圆形hamiltonian cycle/Traveling sales person (假设剪刀就是一个
sales man),上面有16个vertices, 每个vertex 距离相等?
是不是也可以转成linear programming? min (L * n * m), where L is the length/
cost needed per shape cutting, n = 16, m1, m2, ... m16 ?

【在 w***g 的大作中提到】
: 既然贴到这个版来了,就按这个版的规矩来。
: 因为16片之间共享边的话可以使剪刀的路径减小,所以16片肯定是连在一起的一大片。
: 稍微跳跃一下,假设这一大片的边界是一个圆。这样就可以用编程的手段来解决这个问
: 题了。
: 给定一个参数R,可以算出一个半径为R的(近似的)圆。这个圆内有很多像素。以每个
: 像素为一个节点,产生一个图。如果两个像素是相邻的(4相邻或者8相邻,作为参数吧
: ),就在两个对应的节点间连一条边。上面的问题就可以变成一个图着色的问题:
: 怎样把所有的节点按相同的比例涂上16种颜色(因为无法整除,所以有的颜色的节点会
: 比别的颜色的节点少1个),使得两个顶点颜色不一样的边的个数最少。
: 这个问题显然是NP难的。但对于实际问题来说,近似解应该就可以了。

w***g
发帖数: 5958
4
大牛不敢当。
是圆形对应的像素连成的图。确定R画出来的圆里面的像素不一定正好是16n,有可能除
不尽。那样的话不同颜色的像素最多差一个。
你的hamilton cycle+16个vertices思路有点混乱。剪刀走16步,步与步之间会交叉,
切出来的未必是16片。距离相等这个idea倒似乎可以。先均匀放入16个不同颜色的点,
其余的点没有颜色,然后让颜色以相同的速度扩散,不同的颜色碰到的地方就是边。出
来的是一个voronoi图。如果16个点位置放的好的话,就可以保证16块大小一样。
话说,如果精度无穷,能否证明最优切法一定对应一个voronoi图?我看着似乎可以。

length/

【在 W***o 的大作中提到】
: 请教大牛: 为什么觉得graph coloring (2 or 3-coloring?) 是这个方向? 以下面的
: 图为
: 例子,我看不出来你怎么能切除16片等面积的形状出来。
: 为什么不可以用圆形hamiltonian cycle/Traveling sales person (假设剪刀就是一个
: sales man),上面有16个vertices, 每个vertex 距离相等?
: 是不是也可以转成linear programming? min (L * n * m), where L is the length/
: cost needed per shape cutting, n = 16, m1, m2, ... m16 ?

s*i
发帖数: 5025
5
直觉是经典的 surface energy 问题。求最小表面能。
一个是圆
两个肯定是连接的两个半圆(大半,小半,还得解出来)
[发表自未名空间手机版 - m.mitbbs.com]
w***g
发帖数: 5958
6
你这个太牛了。我解了下n=2的情况,确实是两个接起来的大半个圆。
中间的线段对应的圆的内角弧度是2.1的样子。
看来我的直觉还很差。
假设总面积为1, 内角弧度的一半为x,则所有边长度和为
f(x) = (4 * (pi -x) + 2 * sin(x))/sqrt(2*(pi-x)+sin(2*x))
在gnuplot里画一下就看出来了。x=1.05的样子达到最小值。

【在 s*i 的大作中提到】
: 直觉是经典的 surface energy 问题。求最小表面能。
: 一个是圆
: 两个肯定是连接的两个半圆(大半,小半,还得解出来)
: [发表自未名空间手机版 - m.mitbbs.com]

1 (共1页)
进入Programming版参与讨论
相关主题
在2D格子上最短路程的算法问题请问大家一个图形的问题:
请教: 去哪儿找C++的练习题呢?[合集] 问个算法问题
Is this possible?想练习一下C++
data structure for set of path in a graph内存泄露了吗?
100%和必需出票属于没戏了问个算法问题
[合集] 微软另一道智力题,求救谁有《algorithms in C》的练习题的答案?
vi怎样对C++头文件进行语法着色?C语言练习题 (转载)
很简单的练习题,不知各位大佬正巧做过或者还有源码?做面试题真的能提高一个人的编程能力和兴趣吗?
相关话题的讨论汇总
话题: 16话题: 智力题话题: 面积话题: 颜色话题: 像素