wrap函数

aioros9520 2009-09-01 08:41:38
有没有人知道wrap函数是什么?应该是个算法

这是网上的解释: 该函数返回j=index-k*limit,其中k是一个整数,取适当值保证j落在区间[1,limit]内。该函数相当于index模limit再加1。该函数在循环、多阶段计划编制中特别有用.

但我还是不懂, 有高手能举个例子解释下用途么?
...全文
86 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LVJourney 2009-10-08
[Quote=引用 3 楼 aioros9520 的回复:]
引用 1 楼 problc 的回复:
该函数相当于index模limit再加1
按这句话的意思
wrap(index,limit) = int(indext%limit) + 1
没有什么特别的,一个小函数,把index映射到1-limit之间
有解释说防止集合索引越界

网上的实例解释
实例:
职员时序安排模型
一项工作一周 7 天都需要有人(比如护士工作) ,每天(周一至周日)所需的最少职员数为 20、16、13、16、19、14 和 12,并要求每个职员一周连续工作 5 天,试求每周所需最少职员数,并给出安排。注意这里我们考虑稳定后的情况。

这是原程序
model:
sets:
  days/mon..sun/: required,start;
endsets
data:
  !每天所需的最少职员数;
  required = 20 16 13 16 19 14 12;
enddata
!最小化每周所需职员数;
min=
@sum(days:start);
  @for(days(J):
    @sum(days(I) | I #le# 5:
      start(@wrap(J+I+2,7))) >= required(J));
!外国人的第一天是星期日;
end
将上面的程序中的集修改为
sets:
days/1 2 3 4 5 6 0/: required,start;
endsets
运行结果相同
lz还可以参考下http://www.madio.cn/mcm/thread-24860-1-1.html



problc
您能解释下源程序代码吗? 用C最好, 代码我看着实在费劲, 谢谢
[/Quote]同感!!! 顶了!
回复
aioros9520 2009-10-08
[Quote=引用 1 楼 problc 的回复:]
该函数相当于index模limit再加1
按这句话的意思
wrap(index,limit) = int(indext%limit) + 1
没有什么特别的,一个小函数,把index映射到1-limit之间
有解释说防止集合索引越界

网上的实例解释
实例:
职员时序安排模型 
一项工作一周 7 天都需要有人(比如护士工作) ,每天(周一至周日)所需的最少职员数为 20、16、13、16、19、14 和 12,并要求每个职员一周连续工作 5 天,试求每周所需最少职员数,并给出安排。注意这里我们考虑稳定后的情况。

这是原程序
model:
sets:
  days/mon..sun/: required,start;
endsets
data:
  !每天所需的最少职员数;
  required = 20 16 13 16 19 14 12;
enddata
!最小化每周所需职员数;
min=
@sum(days:start);
  @for(days(J):
    @sum(days(I) | I #le# 5:
      start(@wrap(J+I+2,7))) >= required(J));
!外国人的第一天是星期日;
end
将上面的程序中的集修改为
sets:
days/1 2 3 4 5 6 0/: required,start;
endsets
运行结果相同
lz还可以参考下http://www.madio.cn/mcm/thread-24860-1-1.html



[/Quote]
problc
您能解释下源程序代码吗? 用C最好, 代码我看着实在费劲, 谢谢
回复
没有看懂,能否用白话文解释一下里面的核心思想?
谢谢!
问题很不错。
回复
problc 2009-09-03
该函数相当于index模limit再加1
按这句话的意思
wrap(index,limit) = int(indext%limit) + 1
没有什么特别的,一个小函数,把index映射到1-limit之间
有解释说防止集合索引越界

网上的实例解释
实例:
职员时序安排模型
一项工作一周 7 天都需要有人(比如护士工作) ,每天(周一至周日)所需的最少职员数为 20、16、13、16、19、14 和 12,并要求每个职员一周连续工作 5 天,试求每周所需最少职员数,并给出安排。注意这里我们考虑稳定后的情况。

这是原程序
model:
sets:
days/mon..sun/: required,start;
endsets
data:
!每天所需的最少职员数;
required = 20 16 13 16 19 14 12;
enddata
!最小化每周所需职员数;
min=
@sum(days:start);
@for(days(J):
@sum(days(I) | I #le# 5:
start(@wrap(J+I+2,7))) >= required(J));
!外国人的第一天是星期日;
end
将上面的程序中的集修改为
sets:
days/1 2 3 4 5 6 0/: required,start;
endsets
运行结果相同
lz还可以参考下http://www.madio.cn/mcm/thread-24860-1-1.html


回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告