我正在处理一个练习,该练习应该准确地对此类代码的时间复杂度进行基准测试。
我正在处理的数据由像这样的字符串对组成hbFvMF,PZLmRb,每个字符串在数据集中出现两次,一次在位置1,一次在位置2。所以第一个字符串将指向zvEcqe,hbFvMF例如并且列表还在继续......
我已经能够生成代码,对最多 50k 对的数据集进行排序没有太大问题,大约需要 4-5 分钟。10k 只需几秒钟即可完成排序。
问题是我的代码应该处理最多 500 万对的数据集。所以我想看看我还能做些什么。我将发布我的两个最佳尝试,第一个是向量,我认为我可以通过替换来升级,vector因为unsorted_map搜索时的时间复杂度更好,但令我惊讶的是,当我测试它时,两个容器之间几乎没有区别。我不确定我解决问题的方法或我选择的容器是否导致了排序时间过长......
尝试使用向量:
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <map>
#include <unordered_map>
#include <stdio.h>
#include <vector>
#include <iterator>
#include <utility>
#include <functional>
#include <algorithm>
using namespace std;
template<typename T>
void search_bricks_backwards(string resume, vector<T>& vec, vector<string>& vec2) {
int index = 0;
int temp_index = 0;
while (true) {
if (index == vec.size()) {
vec2.insert(vec2.begin(), …Run Code Online (Sandbox Code Playgroud)