此题大意就是: 给定m对不相容的 对象, 问是否存在某种分成2部份的方法,满足不相容的对象分别在两边。设字符串最大长度len
思路:
分成2部分,那么就设为类1,类2。
不相容就让2顶点相连有条边。 然后初始让某点属于类1,从某点开始遍历图,然后看是否会有矛盾产生。
因此很简单。
遍历算法复杂度应该是 O(m)。
但这道题给定的对象是字符串,这时候需要对字符串进行处理。
做法一: 如果是用stl的map将字符串与数字进行绑定,假设有2m个对象,进行建立map,由于是红黑树,所以复杂度是O(mlogm),并且每次字符串比较,最坏复杂度为O(len)
因此此时算法复杂度为O(mlogm*len)。 这也是网上查到的大多数人的做法。
做法二:如果能利用类似哈希表进行存储的方式,那么不妨设每个字符串得到一个哈希值的复杂度为O(len),那么m对,就是O(m*len)。
因此此时算法复杂度为O(m*len)
做法三:.存储查找字符串若用类似字典树的方法,那么复杂度类似的也是O(m*len)
不过似乎google里m值只有100,log级别最多10倍的消耗。