求一思路和算法

kevn 2010-02-05 08:43:46

问题如下:
工厂每天要把多个固定大小的长方形的模板(原料)切割成若干种不同长宽的方形的待加工品,
当然每种待加工品也有数量上的计划,我想计算怎么切割才是最省料的切法
注:1.每切一刀必须是一直到头的,(这个是和工厂的机器有关的)
2.待加工品暂不考虑有其他形状的可能,只有长方形,正方形

我的想法是,比如每天计划切8种材料,每种需要的个数不同,是不是要先切大的,然后看看剩的料切多少小的,
这其中要考虑这8种的面积,长宽,还有数量。

期待牛人的算法。
...全文
129 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
butnet 2010-02-05
  • 打赏
  • 举报
回复
lingo
matlab
xqhwws0 2010-02-05
  • 打赏
  • 举报
回复
这么复杂!!!!
kevn 2010-02-05
  • 打赏
  • 举报
回复
恩,暂时不考虑厚度。。。不考虑厚度也没太多思路
xboy 2010-02-05
  • 打赏
  • 举报
回复
非常复杂,建议先化简成平面模型去完成,也就是说不考虑板材的厚度!
完成平面模型的切割之后再考虑立体模型的切割
guoyu_bo 2010-02-05
  • 打赏
  • 举报
回复
用动态规划

参考下面这本书P486,元件折叠问题

书名: 数据结构算法与应用-C++语言描述
原书名: Data Structures, Algorithms, and Applications in C++
原出版社 Mcgraw-Hill
作者: Sartej Sahni
译者: 汪诗林等
书号: 7-111-07645-1
页码: 536
定价: ¥49.00
丛书名 计算机科学丛书
出版社: 机械工业出版社
出版日期: 2000-1-1

原文如下

15.2.6 元件折叠
在设计电路的过程中,工程师们会采取多种不同的设计风格。其中的两种为位-片设计(bit-slice design)和标准单元设计(standard-cell design)。在前一种方法中,电路首先被设计为
一个元件栈。每个元件Ci 宽为wi ,高为hi ,而元件宽度用片数来表示。线路是按片来连接各元件的,即连线可能连接元件Ci 的第j片到
元件Ci+1 的第j 片。如果某些元件的宽度不足j 片,则这些元件之间不存在片j 的连线。当图1 5 -
10a 的位-片设计作为某一大系统的一部分时,则在V L SI ( Very Large Scale Integrated) 芯片上为
它分配一定数量的空间单元。分配是按空间宽度或高度的限制来完成的。现在的问题便是如何
将元件栈折叠到分配空间中去,以便尽量减小未受限制的尺度(如,若高度限制为H时,必须
折叠栈以尽量减小宽度W)。由于其他尺度不变,因此缩小一个尺度(如W)等价于缩小面积。
可用折线方式来折叠元件栈,在每一折叠点,元件旋转1 8 0°。在图15-10b 的例子中,一
个1 2元件的栈折叠成四个垂直栈,折叠点为C6 , C9 和C1 0。折叠栈的宽度是宽度最大的元件所需
的片数。在图15-10b 中,栈宽各为4,3,2和4。折叠栈的高度等于各栈所有元件高度之和的
最大值。在图15-10b 中栈1的元件高度之和最大,该栈的高度决定了包围所有栈的矩形高度。
实际上,在元件折叠问题中,还需考虑连接两个栈的线路所需的附加空间。如,在图1 5 -
10b 中C5 和C6 间的线路因C6 为折叠点而弯曲。这些线路要求在C5 和C6 之下留有垂直空间,以便
能从栈1连到栈2。令ri 为Ci 是折叠点时所需的高度。栈1所需的高度为
h1+h2+h3++h4+h5+r6,栈2所需高度为h6+h7+h8+r6+r9
在标准单元设计中,电路首先被设计成为具有相同高度的符合线性顺序的元件排列。假设
此线性顺序中的元件为C1,⋯,Cn,下一步元件被折叠成如图1 5 - 11所示的相同宽度的行。在
此图中, 1 2个标准单元折叠成四个等宽行。折叠点是C4,C6 和C11。在相邻标准单元行之间,
使用布线通道来连接不同的行。折叠点决定了所需布线通道的高度。设li 表示当Ci 为折叠点时
所需的通道高度。在图1 5 - 11的例子中,布线通道1的高度为l4,通道2的高度为l6,通道3的高
度为l11。
位-片栈折叠和标准单元折叠都会引出一系列的问题,这些问题可用动态规划方法来解决。
1. 等宽位-片元件折叠
定义r1 = r(n+1) =0。由元件Ci 至Cj 构成的栈的高度要求为
li+l(i+1)+....+ ri+r(j+1) + 1。设一个位-片设计中
所有元件有相同宽度W。首先考察在折叠矩形的高度H给定的情况下,如何缩小其宽度。设Wi
为将元件Ci 到Cn 折叠到高为H的矩形时的最小宽度。若折叠不能实现(如当ri +hi>H时),取
Wi =∞。注意到W1 可能是所有n 个元件的最佳折叠宽度。
当折叠Ci 到Cn 时,需要确定折叠点。现假定折叠点是按栈左到栈右的顺序来取定的。若
第一点定为Ck+ 1,则Ci 到Ck 在第一个栈中。为了得到最小宽度,从Ck+1 到Cn 的折叠必须用最优
化方法,因此又将用到最优原理,可用动态规划方法来解决此问题。当第一个折叠点k+ 1已知
时,可得到以下公式:
Wi =w+ Wk + 1 (1 5 - 9)
由于不知道第一个折叠点,因此需要尝试所有可行的折叠点,并选择满足( 1 5 - 9)式的折
叠点。令h s u m(i,k)=hi+h(i+1)+...+hj。因k+ 1是一个可行的折叠点,因此h s u m(i, k) +ri +rk+1 一定不会超过H。
根据上述分析,可得到以下动态规划递归式:
Wi=w+min{W(k+1)|hsum(i,k)+ri+r(k+1)<=H,i<=k<=n} (15-10)

这里Wn+1 =0,且在无最优折叠点k+ 1时Wi 为∞。利用递归式(1 5 - 1 0),可通过递归计算Wn , Wn- 1
⋯, W2 , W1 来计算Wi。Wi 的计算需要至多检查n-i+ 1个Wk+ 1,耗时为O (n-k)。因此计算所有Wi 的
时间为O (n2 )。通过保留式(1 5 - 1 0)每次所得的k 值,可回溯地计算出各个最优的折叠点,其
时间耗费为O (n)。
现在来考察另外一个有关等宽元件的折叠问题:折叠后矩形的宽度W已知,需要尽量减小
其高度。因每个折叠矩形宽为w,因此折叠后栈的最大数量为s=W / w。令Hi, j 为Ci , ⋯, Cn 折叠成
一宽度为jw 的矩形后的最小高度, H1, s 则是所有元件折叠后的最小高度。当j= 1时,不允许任
何折叠,因此:
Hi,1 =h s u m(i,n) +ri , 1≤i≤n
另外,当i=n 时,仅有一个元件,也不可能折叠,因此:
Hn ,j=hn+rn , 1≤j≤s
在其他情况下,都可以进行元件折叠。如果第一个折叠点为k+ 1,则第一个栈的高度为
h s u m(i,k) +ri +rk+ 1。其他元件必须以至多(j- 1 ) *w 的宽度折叠。为保证该折叠的最优性,其他元件
也需以最小高度进行折叠,即:
Hi,j=max{hsum(i,k)+ri+r(k+1),Hk+1,j-1}

因为第一个折叠点未知,因此必须尝试所有可能的折叠点,然后从中找出一个使式(1 5 - 11)
的右侧取最小值的点,该点成为第一个折叠点。所得递归式为:

Hi,j=min[max{hsum(i,k)+ri+r(k+1),Hk+1,j-1}] i<=k<n

Wi =w+ Wk + 1 (1 5 - 9)
由于不知道第一个折叠点,因此需要尝试所有可行的折叠点,并选择满足( 1 5 - 9)式的折
叠点。令h s u m(i,k)
kevn 2010-02-05
  • 打赏
  • 举报
回复
顶顶
kevn 2010-02-05
  • 打赏
  • 举报
回复
描述的混乱吗,矩形切割问题,一个大的矩形,要切割成若干个大小不一的小矩形,问怎么切最省
liuhaifeng1976 2010-02-05
  • 打赏
  • 举报
回复
理论看不懂,代码也看不懂
guoyu_bo 2010-02-05
  • 打赏
  • 举报
回复
要用动态规划
YouKuWind 2010-02-05
  • 打赏
  • 举报
回复
网上找!
kevn 2010-02-05
  • 打赏
  • 举报
回复
请问哪有类似资料呢
liuhaifeng1976 2010-02-05
  • 打赏
  • 举报
回复
玻璃厂有这种软件。切割玻璃的。可以参考。 算法应该属于算法几何的问题
zhangrenhui 2010-02-05
  • 打赏
  • 举报
回复
UP
精选微软等数据结构+算法面试100题答案修正V0.2版本 -------------------- 此份答案是针对,前期已公布的最初的那份答案的,初步校正与修正。 http://download.csdn.net/source/2796735(V0.1版) 相比第一份V0.1版答案,此份答案V0.2版更加准确,亦修正了不少题目的答案。 此份20题的答案,思路更加清晰易懂,简介明了。 请享用。July、2010/11/06。 其它资源,下载地址: 1.[最新答案V0.3版]微软等数据结构+算法面试100题[第21-40题答案] http://download.csdn.net/source/2832862 2.[第1题-60题汇总]微软等数据结构+算法面试100题 http://download.csdn.net/source/2826690 3.[答案V0.2版]精选微软数据结构+算法面试100题[前20题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1版本,进行的校正与修正。 4.[答案V0.1版]精选微软数据结构+算法面试100题[前25题] http://download.csdn.net/source/2796735 5.[第二部分]精选微软等公司结构+算法面试100题[前41-60题]: http://download.csdn.net/source/2811703 6.[第一部分]精选微软等公司数据结构+算法经典面试100题[1-40题] http://download.csdn.net/source/2778852 更多资源,下载地址: http://v_july_v.download.csdn.net/ ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧