中文名 | 窗时排序 | 外文名 | window scheduling |
---|---|---|---|
所属学科 | 管理科学技术 | 公布时间 | 2016年 |
《管理科学技术名词》第一版。 2100433B
交货期不是一个点而是一个区间的排序。
击【分部整理】,会显示下方窗口,如图一: 钩选分部规则后点击“执行分部整理”即可。 点击【分部整理】,会显示下方窗口,如图二: 点击“执行子目排序”即可
使用08定额,建筑与装饰最好分开(分两个预算)做,就不会出现借用定额的代号了,直接点分部整理即可排序,如果不想分为两个预算,装饰部分可以按鼠标右键插入分部输入编号、分部名称,然后将该分部的子目用上下移...
你是说的定义构件中的构件排序吧,具体子类型是什么也搞不清,但排序最好是选择【按子类型和名称】排序最适当,我试过其它排序,混乱、不好使。
第 8 章 排序 1.选择题 ( 1)从未排序序列中依次取出元素与已排序序列中的元素进行比较, 将其放入已排序序 列的正确位置上的方法,这种排序方法称为( )。 A.归并排序 B.冒泡排序 C.插入排序 D.选择排序 答案: C ( 2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方 法,称为( )。 A.归并排序 B.冒泡排序 C.插入排序 D.选择排序 答案: D ( 3)对 n 个不同的关键字由小到大进行冒泡排序,在下列( )情况下比较的次数最 多。 A.从小到大排列好的 B.从大到小排列好的 C.元素无序 D.元素基本有序 答案: B 解释:对关键字进行冒泡排序,关键字逆序时比较次数最多。 ( 4)对 n 个不同的排序码进行冒泡排序, 在元素无序的情况下比较的次数最多为 ( )。 A. n+1 B. n C. n-1 D. n(n-1)/2 答案:
第 8 章 排序 1.选择题 ( 1)从未排序序列中依次取出元素与已排序序列中的元素进行比较, 将其放入已排序序 列的正确位置上的方法,这种排序方法称为( )。 A.归并排序 B.冒泡排序 C.插入排序 D.选择排序 答案: C ( 2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方 法,称为( )。 A.归并排序 B.冒泡排序 C.插入排序 D.选择排序 答案: D ( 3)对 n 个不同的关键字由小到大进行冒泡排序,在下列( )情况下比较的次数最 多。 A.从小到大排列好的 B.从大到小排列好的 C.元素无序 D.元素基本有序 答案: B 解释:对关键字进行冒泡排序,关键字逆序时比较次数最多。 ( 4)对 n 个不同的排序码进行冒泡排序, 在元素无序的情况下比较的次数最多为 ( )。 A. n+1 B. n C. n-1 D. n(n-1)/2 答案:
第1章绪论 /
11排序问题的背景及描述 /
12现代排序 /
13算法中的几个重要概念 /
14准时排序及相关结果 /
15窗时排序及相关结果 /
16符号表示 /
17本书的贡献与组织结构 /
第2章最小化提前/延误的赋权工件个数 /
21引言 /
22交货期窗口的位置待定 /
23交货期窗口的大小待定 /
24交货期窗口的位置和大小均待定 /
25给定的交货期窗口 /
26推广到多台平行机 /
27结语 /
第3章最小化提前和延误时间惩罚 /
31引言 /
32交货期窗口给定 /
33交货期窗口的位置待定 /
34多个综合目标 /
35推广到多台机器 /
36结语 /
第4章有交货期窗口的无界批处理 /
41批处理问题 /
42相关研究结果 /
43给定的交货期窗口 /
44交货期窗口的位置待定 /
45结语 /
第5章关于非准时工件数的有界批处理 /
51问题描述 /
52最优性质 /
生产调度是根据企业生产系统的生产目标和环境状态,在尽可能满足约束条件(如交货期、工艺要求和路线、资源现状)的前提下,按照工艺规程和计划,通过下达生产计划及调度指令对系统内的可用资源进行实时任务分配,以达到缩短产品的制造周期、减少在制品、降低库存、提高生产资源的利用率及提高制造系统生产率等目的。
影响生产调度问题的因素很多,正常情况下有产品的投产期、交货期(完成期)、生产能力、加工顺序、加工设备和原料的可用性、批量大小、加工路径、成本限制等,这些都是所谓的约束条件。有些约束条件是必须要满足的,如交货期、生产能力等,而有些达到一定的满意度即可,如生产成本等。
为了避免储存及隐藏的额外运转带来的高费用,例如,由于等待、传递、额外劳动力、重加工及订单改变等引起的效益损失,生产商不仅考虑延误带来的惩罚还必须顾及提前完工付出的费用,这就是准时排序问题。它限定工件的交货期:如果工件在交货期之前完工,会出现储存费和保管费之类;而在交货期之后完成,固然要科以罚款,则会产生延误赔偿甚至失去合作机会等损失。而准时排序的目的就是要小化这些费用之和,所以,在“准时”概念中,尽可能使得工件的完工时间接近其交货期或者提前和延误的工件个数尽量少。因此,提前和延误应该尽可能地避免,这也使得以前讨论的传统性能函数无效。既然目标函数是关于工件完工时间的非正则函数,问题的研究相对比较困难。
现实中,供应商和客户在签订供应合同时,通常会指定一个交货时间区间,如果工件在这个时间区间内完成则被认为是准时的,不会招致任何处罚。它是将交货期合理地设置成一个时间段,而不再是单个时间点,这种排序称为窗时排序。我们把这个时间区间称为工件的交货期窗口,该窗口的左端为早交货期(或称“交货期窗口的位置”)、右端为晚交货期。如果工件在窗时交货期前完成,则必须被库存,这种情况视为一个提前处罚。另外,如果工件在交货期窗口后完成,根据合同中的规定,它将导致延迟惩罚。显然,如果交货期窗口较大则可以增加供应商生产和输送的灵活性。然而,设置大型的交货期窗口和延迟工件完成时间都会降低供应商的竞争力和客户服务水平。所以交货期窗口的设置也经常成为问题的目标之一。
本书探讨的内容都是对经典排序的突破,研究现代排序与准时、窗时排序的结合应用,目的是为了在新型排序环境下,使某个衡量函数大或者小,如提前时间、延误时间、提前或延误的工件个数及交货期窗口的确定等 "
二叉排序树(Binary Sort Tree:BST)
1、二叉排序树的定义
二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:
①若它的左子树非空,则左子树上所有结点的值均小于根结点的值;
②若它的右子树非空,则右子树上所有结点的值均大于根结点的值;
③左、右子树本身又各是一棵二叉排序树。
上述性质简称二叉排序树性质(BST性质),故二叉排序树实际上是满足BST性质的二叉树。
2、二叉排序树的特点
由BST性质可得:
(1) 二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字。
(2) 二叉排序树中,各结点关键字是惟一的。
注意:
实际应用中,不能保证被查找的数据集中各元素的关键字互不相同,所以可将二叉排序树定义中BST性质(1)里的"小于"改为"小于等于",或将BST性质(2)里的"大于"改为"大于等于",甚至可同时修改这两个性质。
(3) 按中序遍历该树所得到的中序序列是一个递增有序序列。
【例】下图所示的两棵树均是二叉排序树,它们的中序序列均为有序序列:2,3,4,5,7,8。
3、二叉排序树的存储结构
typedef int KeyType; //假定关键字类型为整数
typedef struct node { //结点类型
KeyType key; //关键字项
InfoType otherinfo; //其它数据域,InfoType视应用情况而定,下面不处理它
struct node *lchild,*rchild,*parent; //左右孩子指针
} BSTNode;
typedef BSTNode *BSTree; //BSTree是二叉排序树的类型
二叉排序树的基本操作(pascal):
1.中序遍历所有元素
procedure tree_walk(x:longint);
begin
if x<>0 then
begin
tree_walk(left[x]);
write(key[x]);
tree_walk(right[x]);
end;
2.查找给定的元素
function tree_search(x,k:longint):longint;
begin
if (x=0) or (k=key[x]) then exit(x);
if k end; 非递归版本 function tree_search(x,k:longint):longint; begin while (x<>0) and (k<>key[x]) do begin if k end; exit(x); end; 3.查找最小元素 function tree_minimum(x:longint):longint; begin while left[x]<>0 do x:=left[x]; exit(x); end; 查找最大元素 function tree_maximum(x:longint):longint; begin while right[x]<>0 do x:=right[x]; exit(x); end; 4. 求后继 function tree_successor(x:longint):longint; var y:longint; begin if right[x]<>0 then exit(tree_minimum(right[x]));//若右子树不空,则返回右子树中的最小值 y:=p[x];//若右子树为空,则后继y为x的最低祖先节点,且y的左儿子也是x的祖先 while (y<>0) and (x=right[y]) do begin x:=y; y:=p[y]; end; exit(y);//注意,若y为0,则x无后继 end; //注意,函数返回值为节点编号,并不是节点本身的值 5.插入 procedure tree_insert(z:longint);//注意z为节点编号,并非树中的值 var x,y:longint; begin y:=0; x:=root; while x<>0 do//查找z的父节点,y记录 begin y:=x; if key[z] end; p[x]:=y; if y=0 then root:=z//若z为根节点 else begin if key[z] end; end; 6.删除 删除操作是最麻烦的,分3种情况: (1)若z无子树,则就删除z节点,更新p[z]的值为空 (2)若z有一个子树,删除z节点,更新p[z]的值为z的儿子节点,更新left[p[z]] 或 right[p[z]] (3)若z有两棵子树,先找到z的后继y(后继节点无左子树,可证),删除y节点,更新p[y]与left[p[y]] 或 right[p[y]],最后用节点y的数据覆盖z节点 procedure tree_delete(z:longint); var x,y:longint; begin if (left[z]=0) or (right[z]=0) then y:=z else y:=tree_successor(z); if left[y]<>0 then x:=left[y] else x:=right[y]; if x<>0 then p[x]:=p[y]; if p[y]=0 then root:=x else begin if y=left[p[y]] then left[p[y]]:=x else right[p[y]]:=x; end; if z<>y then key[z]:=key[y]; end; 7.查找数中第k大元素 需要对每个节点新开一个域v[x],记录该节点的有多少子节点, 查找时分三种情况: (1)k=v[left[x]] 1 则当前x节点为所求 (2)k<=v[left[x]] 则在左子树中继续查找 (3)k>v[left[x]] 1 则在右子树中继续查找,k更新为k-left[x]-1; function find(x,k:longint):longint; begin if v[left[x]] 1=k then exit(key[k]) else if v[left[x]]>=k then exit(find(left[x],k)) else exit(find(right[x],k-v[left[x]]-1)); end;