Greedy methods for solving set cover problems provide a guarantee on how close the solution is to optimal. Consequently they have been widely explored to solve set cover problems arising in the construction of various combinatorial arrays, such as covering arrays and hash families. In these applications, however, a naive set cover formulation lists a number of candidate sets that is exponential in the size of the array to be produced. Worse yet, even if candidate sets are not listed, finding the 'best' candidate set is NP-hard. In this paper, it is observed that one does not need a best candidate set to obtain the guarantee - an average candidate set will do. Finding an average candidate set can be accomplished using a technique employing the method of conditional expectations for a wide range of set cover problems arising in the construction of hash families. This yields a technique for constructing hash families, with a wide variety of properties, in time polynomial in the size of the array produced.