The Scientific World Journal

Volume 2014, Article ID 547573, 8 pages

http://dx.doi.org/10.1155/2014/547573

## Best Possible Approximation Algorithms for Single Machine Scheduling with Increasing Linear Maintenance Durations

School of Science, East China Institute of Technology, Nanchang, Jiangxi 330013, China

Received 6 November 2013; Accepted 19 December 2013; Published 13 February 2014

Academic Editors: J. G. Barbosa and D. Oron

Copyright © 2014 Xuefei Shi and Dehua Xu. This is an open access article distributed under the Creative Commons Attribution License, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.

#### Abstract

We consider a single machine scheduling problem with multiple maintenance activities, where the maintenance duration function is of the linear form with and . We propose an approximation algorithm named FFD-LS2I with a worst-case bound of 2 for problem. We also show that there is no polynomial time approximation algorithm with a worst-case bound less than 2 for the problem with unless , which implies that the FFD-LS2I algorithm is the best possible algorithm for the case and that the FFD-LS algorithm, which is proposed in the literature, is the best possible algorithm for the case both from the worst-case bound point of view.

#### 1. Introduction

Scheduling with machine maintenance has attracted many researchers’ attention in the last two decades (see, e.g., [1–13]), where high performance approximation algorithms are of great value not only theoretically but also practically.

In a recent paper, Xu et al. [14] study a single machine scheduling problem with multiple maintenance activities which can be formally described as follows. There are independent jobs to be processed on a single machine. The processing time of job is . All jobs are nonpreemptive and are available at time zero. The machine can process at most one job at a time. Assume that the machine has just finished a dummy maintenance activity at time zero. The length of the time interval between any two consecutive maintenance activities is and prefixed. The amount of time needed to perform one maintenance activity is an increasing linear function of the total processing time of the jobs that are processed after its latest previous maintenance activity, where and are prefixed nonnegative real numbers with . The objective is to schedule all the jobs to the machine such that the makespan, that is, the completion time of the last finished job, is minimized. Extending the well-known three-field classification scheme suggested by Graham et al. [15], the problem is denoted by , , , in Xu et al. [14]. For simplicity, in what follows, we denote this problem by and its counterpart where by . Additionally, the problem is denoted by if .

Xu et al. [14] first propose an approximation algorithm named FFD-LS for the problem and then show that its worst-case bound is 2. The underlying idea of their FFD-LS algorithm is straightforward. Viewing the jobs as items, it first packs these items into some bins with the same capacity of by the classical bin-packing algorithm FFD. Let the “jobs” in each used bin plus a maintenance activity whose duration is computed according to the maintenance function be viewed as a hybrid job. Assign all the hybrid jobs except the last one (i.e., the one with the largest index) to the machine by the classical LS algorithm. Assign the last hybrid jobs to the machine.

For the sake of convenience and completeness, the bin-packing problem, the FFD algorithm, the LS algorithm, and the FFD-LS algorithm are presented as follows.

*Bin-Packing Problem* (see, e.g., Coffman et al. [16]). Given items , each with a size , we are asked to pack them into a minimum number of -capacity bins (i.e., partition them into a minimum number of subsets such that , ).

*Algorithm FFD* (see, e.g., Coffman et al. [16]). Sort all the items such that ; for , item is packed in the first (lowest-indexed) bin into which it will fit; that is, if there is any partially filled bin with where is the sum of the sizes of the items that have been packed into bin , we place in the lowest-indexed bin having this property. Otherwise, we start a new bin with as its first item.

*Algorithm LS* (see, e.g., Pinedo [17]). Put all the jobs on a list in arbitrary order; then process the jobs consecutively as early as possible.

*Algorithm FFD-LS* (see Xu et al. [14])

*Step* *1*. Construct a bin-packing instance as follows. There are items ; the size of item is , and the capacity of each bin is . Using the FFD algorithm, assume that we obtain used bins . Let bin be denoted as , where is the number of items in and is the th item assigned to .

*Step* *2*. For , let , where is the job with a processing time of corresponding to item , is a dummy job with the processing time of , and denotes a maintenance activity with the length of .

*Step* *3*. Let be viewed as a single job with the processing time of . Assign to the machine by the LS algorithm. Assign to the machine.

Although the FFD-LS algorithm is originally proposed for , it can also be applied to without any modification. However, as can be seen in the next section, there exists an example showing that the worst-case bound of the FFD-LS algorithm can be arbitrarily large for . As a result, we then focus our attention on studying its worst-case bound for in detail. Specifically, we think of each interval between two consecutive maintenance activities as a batch with a capacity and show that its worst-case bound is 2 for if the number of nonempty batches in the FFD-LS schedule is not 2. In order to avoid the arbitrarily large worst-case bound, in Section 3, we modify the FFD-LS algorithm and get a new approximation algorithm named FFD-LS2I algorithm with a worst-case bound of 2 for by adding a step to the FFD-LS algorithm. In Section 4, we study the nonapproximability of the problem and show that there is no polynomial time approximation algorithm with a worst-case bound less than 2 for the problem , which implies that the FFD-LS2I algorithm is the best possible algorithm for and that the FFD-LS is the best possible algorithm for both from the worst-case bound point of view. Finally, in Section 5, we give an answer to another open problem proposed in Xu et al. [14].

#### 2. Worst-Case Bound of the FFD-LS Algorithm for

*Example 1. *Consider the scheduling problem with the following instance: , , , and . It is easy to see that the FFD-LS algorithm assigns job to the first batch and to the second batch and that the corresponding makespan is . Note that the optimal schedule assigns job to the first batch and to the second batch and that the optimal makespan is . Clearly, as . In other words, the worst-case bound of the FFD-LS algorithm can be arbitrarily large.

Now, let . Let be an optimal schedule with nonempty batches which are indexed according to the processing order. Recall that we assume that there are totally bins being used by the FFD algorithm in the first step of the FFD-LS algorithm. So, for consistency, we may assume that there are totally nonempty batches in the FFD-LS schedule. For convenience, in what follows, these batches are denoted by which are also indexed according to the processing order. Let the total processing times of the jobs in batch and batch be denoted by and , respectively. It is easy to see that the makespan of the optimal schedule is
and that the makespan of the FFD-LS schedule is

In what follows, we shall study the worst-case bound of the FFD-LS algorithm for in detail, which can help us develop a more sophisticated approximation algorithm. Before the study of the worst-case bound, we first present some lemmas.

Lemma 2. *For the problem , the total processing time of the jobs in any two nonempty batches is strictly larger than in .*

*Proof (by contradiction). *It suffices to show that for .

If there exist two batches, say and , such that , where , consider the following two cases.*Case* *1**(**).* Note that . Now, reschedule all the jobs of into and delete with the corresponding maintenance activity. Let the new schedule be denoted by . It is easy to see that is a feasible schedule with a makespan of
Comparing (1) with (3), we have , which contradicts the optimality of .*Case* *2* *(**and **).* Similar to Case 1, reschedule all the jobs of into and delete with its corresponding maintenance. Let the new schedule be denoted by . It is easy to see that is a feasible schedule with a makespan of
Recall that . Comparing (1) with (4), we have , which again contradicts the optimality of .

This completes the proof.

Lemma 3. *For problem , let be a feasible schedule with two nonempty batches and let be a feasible schedule with three nonempty batches. Let the total processing times of the jobs in the first batch of and in the second batch of be denoted by and , respectively. Let the total processing times of the jobs in the first batch of , in the second batch of , and in the third batch of be denoted by , and , respectively. If and for , then one has , where and are the makespans of and , respectively.*

*Proof. *It is easy to see that

Combining (5) with (6), we have
Recall that . So we have
Note that and . So we have

This completes the proof.

Lemma 4. *.*

*Proof. *View each interval between two consecutive maintenance activities as a bin with capacity and the jobs as items with a size of . Let be the minimum number of nonempty bins that is needed to pack all the items. It is well known that (see Simchi-Levi [18]). Note that . So we have . This completes the proof.

Lemma 5. *For the problem , if , then and .*

*Proof. *By , it is easy to see that and since that one batch is clearly not sufficient in any feasible schedule. On the other hand, by Lemma 2, we have for otherwise we have , a contradiction. Note that the total processing time of the jobs in any two batches in the FFD-LS schedule is strictly larger than . We thus have . To sum up, we have and . This completes the proof.

Now, we are ready to evaluate the worst-case bound of the FFD-LS algorithm in detail.

Theorem 6. *For the problem , the worst-case bound of the FFD-LS algorithm is not greater than 2 if .*

*Proof. *By (1), we have
Note that (see Lemma 4). So we have
Substituting (11) into (2), we have

Now, consider the following two cases.*Case* *1 (**).* In this case, we have
Substituting (13) into (12), we have
Note that , , and . Combining these three inequalities with (14), we have and we are done.*Case* *2 (**).* In this case, it is easy to see that because two batches are obviously not sufficient in any optimal solution. Note that the total processing time of the jobs in any two nonempty batches is strictly larger than in the FFD-LS schedule. We thus have for otherwise the total processing times of the jobs will be strictly larger than , which violates the assumption of this case.

Combining with (1), we have
By simple algebra, we have
Note that . So we have

Similarly, combining , , and (2), we have
By simple algebra, (18) becomes
Substituting (17) into (19), we have
Recall that ; we thus have .

This completes the proof.

Theorem 7. *For the problem , the worst-case bound of the FFD-LS algorithm is not greater than 2 if and .*

*Proof. *Substituting into (2), we have

By Lemma 5, we have . Now, consider the following two cases.*Case* *1 (**).* Substituting into (1), we have
Combining (22) with (21), we have
Note that . Combining this with (23), we have
Note that and that . So, by (24), we have .*Case* *2 (**).* Substituting into (1), we have
Combining (25) with (21), we have
Note that and . So we have

Note that . Combining this with (25), we have . Substituting this into (27), we have .

This completes the proof.

Theorem 8. *For the problem , the worst-case bound of the FFD-LS algorithm is not greater than 2 if .*

*Proof. *Consider the following three cases.*Case* *1 (**).* It is trivially obvious that in this case we have , and we are done. *Case* *2 (**).* Clearly, in this case, we have . Now, if , then, by Theorem 7, we know that the worst-case bound of the FFD-LS algorithm is not greater than 2, and we are done. If , then by Theorem 6, we know that the worst-case bound of the FFD-LS algorithm is not greater than 2 either, and we are also done. This complete the proof of Case 2. *Case* *3 (**).* Clearly, in this case, we have . Again, by Theorem 6, we know that the worst-case bound of the FFD-LS algorithm is not greater than 2, and we are done.

This completes the proof.

#### 3. A Modified Approximation Algorithm and Its Worst-Case Bound for

We know from Example 1 and Theorem 8 that the worst-case bound of the FFD-LS algorithm can be arbitrarily large if and is 2 otherwise. Following the notation in Xu et al. [14], is the hybrid job which consists of the th nonempty bin obtained by the FFD algorithm and the corresponding maintenance activity. Note that is scheduled before in the FFD-LS schedule. So we have and . In order to avoid the arbitrarily large worst-case bound, as we observe, we only need to add the following step after the FFD-LS algorithm.

*Step* *4*. If and , interchange with .

Let us call this modified algorithm FFD-LS2I, which applies algorithm FFD-LS first and then applies Step 4. Clearly, the computational complexity of the FFD-LS2I is . Let the FFD-LS2I schedule be denoted by and let the total processing times of the jobs in the th batch of be denoted by . It is easy to see that the number of the nonempty batches in is also because the fourth step of the FFD-LS2I algorithm does not change the number of batches.

In order to show that the worst-case bound of the FFD-LS2I algorithm is 2, by the structure of the FFD-LS2I algorithm and Theorem 8, we only need to consider the case .

Theorem 9. *For the problem , the worst-case bound of the FFD-LS2I algorithm is not greater than 2 if .*

*Proof. *Clearly, implies . Hence, by Lemma 4, we have . Note that the FFD-LS2I schedule has two nonempty batches and that Lemma 3 indicates that the makespan of a feasible schedule with two batches is always less than that of a feasible schedule with three batches. So we have .

Substituting into (1), we have
Similar to (2), the makespan of the FFD-LS2I schedule is
Combining these two equations, we have

Note that . We claim that for otherwise we have and thus we can get a schedule with a smaller makespan by interchanging all the jobs in the first batch of with those in the second batch of , which clearly violates the optimality of . Combining this with , we have
*Case* *1 (**).* Note that and that . So we have . And thus . Combining this with , we have
Substituting (31) and (32) into (30), we have
which implies that .*Case* *2 (**).* Consider the schedule which schedules the hybrid job first and then the hybrid job . Let the total processing time of the jobs in the first batch of and in the second batch of be denoted by and , respectively. Clearly, . Note that Step 4 schedules the hybrid job with the highest level last. So we have .

Let the makespan of the schedule be denoted by . It is easy to see that
Recall that and . Comparing (29) with (34), we have

Now, consider two subcases.*Subcase 2.1*. There is only one job, say job , in the first batch of the schedule . Without loss of generality, we assume that the jobs in are ordered in nondecreasing order of their processing times; that is, . Suppose that . Clearly, we have

Now, consider the position of job in the optimal schedule . If is in the first batch of , then we have . Combine this with (37), we have . If is in the second batch of , then at least one job, say with , must be assigned to the first batch of . To see this is the case, suppose all the jobs are assigned to the second batch of . We thus have . Combining this with (36), we have , which implies that is infeasible, clearly, a contradiction. Now, suppose is in the first batch of , where . Note that . So we have . Combining this with (37), we have . So, in either case, we have . Combining this with (28) and (34), we have . Combining this with (35), we have , which implies that by the optimality of .*Subcase 2.2*. There are at least two jobs in the first batch of the schedule . Let be the job with the smallest processing time in the first batch of the schedule . Clearly, we have
Combining (28) with (34), we have
By (38), we know that
Recall that and that . So we have
By a similar reasoning as in the arguments of deducing (31), we have
Substituting (41) and (42) into (39), we have
which implies that . Combining this with (35), we have .

This completes the proof.

Now, we are ready to present the worst-case bound of the FFD-LS2I algorithm.

Theorem 10. *For the problem , the worst-case bound of the FFD-LS2I algorithm is 2 and the bound is tight.*

*Proof. *If , it is clear that the FFD-LS2I algorithm is reduced to the FFD-LS algorithm, and thus, by Theorem 8, we know that the worst-case bound of the FFD-LS2I algorithm is not greater than 2. If , then, by Theorem 9, we know that the worst-case bound of the FFD-LS2I algorithm is not greater than 2 either. Hence, we have completed the proof that the worst-case bound of the FFD-LS2I algorithm is not greater than 2.

To show that this bound cannot be smaller than 2, consider the following instance. Let , , , , , , and . It is easy to see that while . It follows that as .

This completes the proof.

#### 4. Nonapproximability

In this section, we shall show that it is impossible to have a polynomial time approximation algorithm with a worst-case bound of less than 2 for the scheduling problem unless NP, which implies that the proposed algorithm FFD-LS2I is the best possible approximation algorithm for from the worst-case bound point of view and that the FFD-LS algorithm proposed by Xu et al. [14] is the best possible approximation algorithm for from the same point of view.

Note that the case has been considered in Ji et al. [3] (see the following lemma, that is, Lemma 11), so we only need to consider the case , that is, the problem .

Lemma 11 (Ji et al. [3]). *There is no polynomial time approximation algorithm with a worst-case bound less than 2 for the scheduling problem unless NP.*

The underlying idea of our approach for problem is by contradiction. Specifically, we shall show that if there exists an approximation algorithm with a worst-case bound of with for then it can be used to establish a polynomial time algorithm for the well-known NP-complete problem Partition. This clearly leads to a contradiction if NP. Hence, such an approximation algorithm for the scheduling problem cannot exist unless NP.

*Partition Problem* (see, e.g., Garey and Johnson [19]). Given positive integers with , does there exist a set with ?

For any fixed positive number and an instance I of the Partition problem, we construct an instance II of the scheduling problem as follows. There are jobs and the processing time of job is . Let and . It is clear that this construction can be performed in polynomial time.

Theorem 12. *If there exists a polynomial time approximation algorithm with a worst-case bound of for some positive number for the scheduling problem , then there exists a polynomial time algorithm for the Partition problem.*

*Proof. *Given any instance I of the Partition problem, we construct the corresponding instance II of the scheduling problem in polynomial time as stated above. Let and be the makespan of the schedule produced by the approximation algorithm and the makespan of an optimal schedule for the instance II of , respectively. We shall show that the instance I of the Partition problem can be answered by merely comparing the values of and .

To see that this is the case, let us apply algorithm to instance II. We claim that if then there exists a solution to instance I of the Partition problem and, otherwise, there does not exist a solution to instance I. In what follows, we shall show that this claim is correct.*Case* *1* *(**).* Clearly, we have because . Let be the total number of batches used in . Note that and , so we have .

Let be the total processing time of the jobs in the th batch of . If , then, by (1), we have . Note that . So we have , which contradicts the inequality . This implies that . That is, the optimal schedule has two nonempty batches. Now, let be the set of indices of the jobs scheduled in the first batch of the optimal schedules. Clearly we have . Recall that and for . So we have , which implies that there exists a solution to the instance I of the Partition problem.*Case* *2 (**).* Recall that the worst-case bound of the algorithm is . So we have
Recall that . So we have
Substituting (45) into (44), we have

If there exists a solution, namely, set , to the instance I of the Partition problem, let the jobs whose indices belong to the set be scheduled into the first batch and the remaining jobs the second batch; we then obtain a schedule with a makespan of , which clearly contradicts (46). Hence, there does not exist a solution to the instance I of the Partition problem.

This completes the proof.

By Theorem 10 and the fact that no NP-complete problem can be solved by a polynomial time algorithm unless NP, we have the following result.

Theorem 13. *There is no polynomial time approximation algorithm with a worst-case bound less than 2 for the scheduling problem unless .*

Combining Lemma 11 and Theorem 13, we have the following result.

Theorem 14. *There is no polynomial time approximation algorithm with a worst-case bound less than 2 for the scheduling problem unless .*

Recall that we have showed in Theorem 10 that the worst-case bound of the FFD-LS2I algorithm is 2 for . Combining this with Theorem 14, we have the following result.

Theorem 15. *The FFD-LS2I algorithm is the best possible polynomial time approximation algorithm for unless from the worst-case bound point of view.*

Recall that Xu et al. [14] have showed that the worst-case bound of the FFD-LS algorithm is 2 for . Combining this with Theorem 14, we have the following result.

Theorem 16. *The FFD-LS algorithm is the best possible polynomial time approximation algorithm for unless from the worst-case bound point of view.*

#### 5. An Answer to Another Open Problem

Viewing each batch as a bin, in Remark 3 of Section 4 of the paper of Xu et al. [14], Xu et al. claim that “it seems that it is not necessary for an optimal schedule of , , , to have the minimum number of bins. Whether this is true may be an interesting problem for further study.” The following example gives an answer to this open problem.

*Example 17. *Consider the following instance for the scheduling problem under consideration: , , , , , and . It is easy to see that the minimum number of bins for this instance is 4; see, for example, that job and job are packed into bin for . The corresponding makespan is 729. However, if we assign job to the th bin for and assign the remaining jobs to the fifth bin, we get an optimal schedule with a makespan of 728. Clearly, this implies that it is not necessary for an optimal schedule of the considered scheduling problem to have the minimum number of bins.

#### 6. Conclusion

In this paper, we revisited the single machine scheduling problem considered in Xu et al. [14]; we provided an approximation named FFD-LS2I with a worst-case bound of 2 for the case . We showed that the FFD-LS2I algorithm is the best possible algorithm for the case and that the FFD-LS algorithm is the best possible algorithm for the case both from the worst-case bound point of view. We also give an answer to another open problem proposed in Xu et al. [14].

Future research may focus on the design of approximation algorithms with a lower time complexity while maintaining the worst-case bound of 2. The other maintenance duration functions such as convex function and concave function are also worth considering.

#### Conflict of Interests

The authors declare that there is no conflict of interests regarding the publication of this paper.

#### Acknowledgments

This research was supported in part by the National Natural Science Foundation of China (71201022) and the Natural Science Foundation of Jiangxi Province (20122BAB201010).

#### References

- G. Schmidt, “Scheduling with limited machine availability,”
*European Journal of Operational Research*, vol. 121, no. 1, pp. 1–15, 2000. View at Publisher · View at Google Scholar · View at Scopus - C.-Y. Lee, “Machine scheduling with availability constraints,” in
*Handbook of Scheduling: Algorithms, Models and Performance Analysis*, J. Y.-T. Leung, Ed., pp. 22.1–22.13, CRC Press, Boca Raton, Fla, USA, 2004. View at Google Scholar - M. Ji, Y. He, and T. C. E. Cheng, “Single-machine scheduling with periodic maintenance to minimize makespan,”
*Computers & Operations Research*, vol. 34, no. 6, pp. 1764–1770, 2007. View at Publisher · View at Google Scholar · View at Scopus - Y. Ma, C. Chu, and C. Zuo, “A survey of scheduling with deterministic machine availability constraints,”
*Computers & Industrial Engineering*, vol. 58, no. 2, pp. 199–211, 2010. View at Publisher · View at Google Scholar · View at Scopus - K. Sun and H. Li, “Scheduling problems with multiple maintenance activities and non-preemptive jobs on two identical parallel machines,”
*International Journal of Production Economics*, vol. 124, no. 1, pp. 151–158, 2010. View at Publisher · View at Google Scholar · View at Scopus - C.-J. Hsu, T. C. E. Cheng, and D.-L. Yang, “Unrelated parallel-machine scheduling with rate-modifying activities to minimize the total completion time,”
*Information Sciences*, vol. 181, no. 20, pp. 4799–4803, 2011. View at Publisher · View at Google Scholar · View at Scopus - S. Bock, D. Briskorn, and A. Horbach, “Scheduling flexible maintenance activities subject to job-dependent machine deterioration,”
*Journal of Scheduling*, vol. 15, pp. 565–578, 2012. View at Publisher · View at Google Scholar · View at Scopus - V. Gordon, V. Strusevich, and A. Dolgui, “Scheduling with due date assignment under special conditions on job processing,”
*Journal of Scheduling*, vol. 15, pp. 447–456, 2012. View at Publisher · View at Google Scholar · View at Scopus - B. Mor and G. Mosheiov, “Scheduling a maintenance activity and due-window assignment based on common flow allowance,”
*International Journal of Production Economics*, vol. 135, no. 1, pp. 222–230, 2012. View at Publisher · View at Google Scholar · View at Scopus - D. Xu, M. Liu, Y. Yin, and J. Hao, “Scheduling tool changes and special jobs on a single machine to minimize makespan,”
*Omega*, vol. 41, pp. 299–304, 2013. View at Publisher · View at Google Scholar · View at Scopus - D. Xu and D.-L. Yang, “Makespan minimization for two parallel machines scheduling with a periodic availability constraint: mathematical programming model, average-case analysis, and anomalies,”
*Applied Mathematical Modelling*, vol. 37, pp. 7561–7567, 2013. View at Publisher · View at Google Scholar - D.-L. Yang and S.-J. Yang, “Unrelated parallel-machine scheduling with multiple rate-modifying activities,”
*Information Sciences*, vol. 235, pp. 280–286, 2013. View at Publisher · View at Google Scholar - S.-J. Yang, “Unrelated parallel-machine scheduling with deterioration effects and deteriorating multimaintenance activities for minimizing the total completion time,”
*Applied Mathematical Modelling*, vol. 37, pp. 2995–3005, 2013. View at Publisher · View at Google Scholar - D. Xu, Y. Yin, and H. Li, “Scheduling jobs under increasing linear machine maintenance time,”
*Journal of Scheduling*, vol. 13, no. 4, pp. 443–449, 2010. View at Publisher · View at Google Scholar · View at Scopus - R. L. Graham, E. L. Lawler, J. K. Lenstra, and A. H. G. R. Kan, “Optimization and approximation in deterministic sequencing and scheduling: a survey,”
*Annals of Discrete Mathematics*, vol. 5, pp. 287–326, 1979. View at Publisher · View at Google Scholar · View at Scopus - E. G. Coffman Jr., M. R. Garey, and D. S. Johnson, “Approximation algorithms for bin packing: a survey,” in
*Approximation Algorithms for NP-Hard Problems*, D. S. Hochbaum, Ed., pp. 46–93, PWS, Boston, Mass, USA, 1997. View at Google Scholar - M. Pinedo,
*Scheduling: Theory, Algorithms, and Systems*, Springer, New York, NY, USA, 4th edition, 2012. - D. Simchi-Levi, “New worst-case results for the bin-packing problem,”
*Naval Research Logistics*, vol. 41, no. 4, pp. 579–585, 1994. View at Google Scholar · View at Scopus - M. R. Garey and D. S. Johnson,
*Computers and Intractability: A Guide to the Theory of NP-Completeness*, W.H. Freeman and Company, New York, NY, USA, 1979.