c – 为什么大多数STL算法需要将数据排序为输入?
在C中使用STL算法时,我发现很多方法,如std :: merge,std :: inplace_merge,std :: set_union,std :: upper_bound,std :: lower-bound等…只将排序数据作为输入.
有意义的是,在排序数据上,这些算法会提供更快的结果,但为什么它们也不能处理未排序的数据呢?为什么大多数算法都设计有这样的数据依赖? 解决方法
对于排序数据的“有意义”的算法,开发人员应该知道是否是这种情况,并且可以根据需要轻松地对输入进行排序.算法可以检查数据是否先排序,但这会浪费时间.例如,upper_bound在预先排序的输入上可以是O(logN),而检查排序则是O(N).还要记住,一般情况下,算法无处可存储状态,说“我检查了一次并且数据已经排序”(他们怎么能知道在不了解线程存在的情况下会持续多长时间,如何使用锁等),所以他们必须为每次调用数据做这件事. 此外,您提到的一些算法 – 例如 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |