画圆的沙滩

亦简亦美

2011年3月22日 #

分割数组

摘要: 编程之美2.18节。作者的代码很精练,可惜解释不太清晰。虽然代码只有三个for语句,可是头两个for语句不可以随意置换。而且,第二个for语句必须是以递减的方式计算。取i个元素求和,把这些和构成一个集合。我们只记录<=sum/2的和,则最多可以获得n/2个集合S(i)。在构造S(i)的时候,可以使用S(i-1)中的和加上一个未使用的元素v[k]来构造。每多一个新元素,这些集合就可以扩张一次,这两个for循环的含义也即在此。如果使用set来维护这些集合,由于自动忽略了重复的元素,算法实际上并不会达到O(2^n)的复杂度,最多为O(n^2*sum),即解法三的复杂度。而且,由于使用的是set 阅读全文

posted @ 2011-03-22 15:29 acmaru 阅读(290) 评论(0) 推荐(0) 编辑

导航