| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2618 人关注过本帖
标题:来一个求助帖 算法题(应该有现成的) 现实生活需要 拿出来让高手们解决下
只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:3 
W*H 的A, 就开一个 W*H 的位数组A,然后用B数组覆盖A,
是这样的吗,?楼上?

我就是真命天子,顺我者生,逆我者死!
2011-10-03 19:35
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
还有 即使是穷举 也得有个搜索办法 在某些情况下 可以不计一定程度的计算时间
2011-10-03 22:05
ckstorm
Rank: 2
等 级:论坛游民
帖 子:32
专家分:90
注 册:2005-10-2
收藏
得分:62 
如果一定要求不规则的话,还真是难算。但是放到现实中,比方物流就方便点。现实中会把不规则图形变成矩形来方便装箱摆放。
1.求出图形中心点,然后以这个中心点求出一个能容纳不规则图形的矩形。
2.理想的最大装箱数量是总面积除以矩形面积,取整。
3.实际中,以最大满足容器一边为条件,枚举所有可能。(比方说容器为10*11的矩形,单个矩形为2*3。先最大满足10边长枚举,这个时候矩形摆放为:2+2+2+2+2,可以放18个;然后以最大满足另一边为条件,这时候为:2+2+2+2+3,可以放17个)。如果有多种可能则全部枚举(比方说边长12,可以是6个2,也可以是4个3)。
4.在第三步中,一旦满足理想最大数量就退出,理想最大数量就是所求;如果未能满足则取所有可能中的最大一个。

大家来拍砖 ~~
2011-10-03 23:09
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
以下是引用ckstorm在2011-10-3 23:09:06的发言:

如果一定要求不规则的话,还真是难算。但是放到现实中,比方物流就方便点。现实中会把不规则图形变成矩形来方便装箱摆放。
1.求出图形中心点,然后以这个中心点求出一个能容纳不规则图形的矩形。
2.理想的最大装箱数量是总面积除以矩形面积,取整。
3.实际中,以最大满足容器一边为条件,枚举所有可能。(比方说容器为10*11的矩形,单个矩形为2*3。先最大满足10边长枚举,这个时候矩形摆放为:2+2+2+2+2,可以放18个;然后以最大满足另一边为条件,这时候为:2+2+2+2+3,可以放17个)。如果有多种可能则全部枚举(比方说边长12,可以是6个2,也可以是4个3)。
4.在第三步中,一旦满足理想最大数量就退出,理想最大数量就是所求;如果未能满足则取所有可能中的最大一个。

大家来拍砖 ~~
第一条边可以那么搞 后面的摆放就困难了
我想到一个思路 大家也一起拍拍砖:
用剩余空间来遍历 没放一个矩形区域 就先计算下横向剩余空间 然后在这个空间内放置一个物体
假设物体排放只有两个形态 一个是横向 一个是纵向
假设空间是垂直倾斜的 左下角为支点 向左倾斜 并不急平衡问题 例如会不会因为重力问题会导致不平衡物体会倾斜
那么 如楼上说的 第一步应该是先计算剩余空间 计算方法是先求矩形物体最长边 那么剩余区域就是空间起始边和物体最长边形成的矩形区域
把第一个物体以一种形态放置在这个矩形区域内 然后向下遍历
再求剩余空间 这次求出来的可能就不是矩形区域了 可能是不规则的区域 求剩余空间是以当前边缘(底边)和其的最高点加上物体最长边来求形成的区域
再往这个区域内放置物体 物体的放置以先以底边方向搜索最低点放置物体 以一种形态放置在上面 然后再向下遍历

也就是每种形态都有一次遍历 遍历的过程可以以递归(或树遍历)的方式 当然写程序不一定需要递归

思路是这样 晚些那图举例
2011-10-04 10:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
没那么简单,问题在放到后面会碰到要把前面已放好的东西抽出来重新分配的情形,也就是说,算法要求一开始就把整体情形设计好,递归是最容易误入的死路(退一千万步即使算法成立栈也会迅速崩溃)。

授人以渔,不授人以鱼。
2011-10-04 11:11
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
这儿不能发图片 所以就发到我那个论坛上了
http://www.

楼上说的不是很明白 如果按照两种形态放置的话 那就可以认为是二叉树
另外我说的明白 递归的逻辑 并不是递归的程序 也就是说可以循环 至于数据量大小 那是编程的事儿 不是这个算法的问题
大数据量计算 可以把堆栈保存到文件里
2011-10-04 11:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
与什么树都无关,这是几何体积(二维局限在面积)最大问题。用最简单的说法,就是摆第一行的时候就要考虑到后面一行的摆法,任何一行都与其余全部行有关(更何况不可能是一行一行摆那么简单,是狗牙交错的,连行的概念都没有)。不存在递归的思路,一开始就是最终、全局的考虑,没办法分拆,凡是分拆步骤的算法,都是不完全的。

授人以渔,不授人以鱼。
2011-10-04 11:44
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:1 
以下是引用TonyDeng在2011-10-4 11:44:21的发言:

与什么树都无关,这是几何体积(二维局限在面积)最大问题。用最简单的说法,就是摆第一行的时候就要考虑到后面每一行的摆法,任何一行都与其余全部行有关(更何况不可能是一行一行摆那么简单,是狗牙交错的,连行的概念都没有)。不存在递归的思路,一开始就是最终、全局的考虑,没办法分拆,凡是分拆步骤的算法,都是不完全的。

我也觉得是这样子的,一开始想着用面积覆盖去穷举,不靠谱啊...
我数学比较差,前面的解题思路表示看不懂

[ 本帖最后由 BlueGuy 于 2011-10-4 11:50 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2011-10-04 11:47
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
以下是引用TonyDeng在2011-10-4 11:44:21的发言:

与什么树都无关,这是几何体积(二维局限在面积)最大问题。用最简单的说法,就是摆第一行的时候就要考虑到后面每一行的摆法,任何一行都与其余全部行有关(更何况不可能是一行一行摆那么简单,是狗牙交错的,连行的概念都没有)。不存在递归的思路,一开始就是最终、全局的考虑,没办法分拆,凡是分拆步骤的算法,都是不完全的。
那你能直接针对我说的那种方法有什么不行的地方吗
树指的是我的算法的遍历等同逻辑 并不是这个东西一定是树

对于你说不存在多行的问题 我算法解决方法前提是把空间看成倾斜的瓶子 我放置的时候是一层一层的放 有什么不妥么
2011-10-04 11:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
是的,摆下去其实不是问题,只要不超过限制,怎么摆都是一种可行方案,但你没办法知道哪种摆法才是最值方案——方案的数量似乎与个体数量和几何规格呈指数关系,膨胀得非常快,对小数目有效的算法,很可能对加1的个体就失效。这问题看着简单,其实很难解的,哥德巴赫猜想看着也很容易,即使总能验证具体个案,但就是无法证实,这个也类似。

授人以渔,不授人以鱼。
2011-10-04 11:54
快速回复:来一个求助帖 算法题(应该有现成的) 现实生活需要 拿出来让高手们解 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013204 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved