В настоящее время я пытаюсь закодировать определенный подход динамического программирования для проблемы с маршрутизацией транспортного средства.В определенный момент у меня есть частичный маршрут, который я хочу добавить к minmaxheap, чтобы сохранить 100 лучших частичных маршрутов на одном этапе.Большая часть программы работает гладко, но когда я на самом деле хочу вставить частичный маршрут в кучу, все идет немного медленнее.Этот конкретный код показан ниже:
clock_t insert_start, insert_finish, check1_finish, check2_finish;
insert_start = clock();
check2_finish = clock();
if(heap.get_vector_size() < 100) {
check1_finish= clock();
heap.insert(expansion);
cout << "node added" << endl;
}
else {
check1_finish = clock();
if(expansion.get_cost() < heap.find_max().get_cost() ) {
check2_finish = clock();
heap.delete_max();
heap.insert(expansion);
cout<< "worst node deleted and better one added" <<endl;
}
else {
check2_finish = clock();
cout << "cost too high check"<<endl;
}
}
number_expansions++;
cout << "check 1 takes " << check1_finish - insert_start << " ms" << endl;
cout << "check 2 takes " << check2_finish - check1_finish << "ms " << endl;
insert_finish = clock();
cout << "Inserting an expanded state into the heap takes " << insert_finish - insert_start << " clocks" << endl;
Типичный вывод такой:
cost too high check
check1 takes 0 ms
check2 takes 0ms
Inserting an expanded state into the heap takes 0 clocks
cost too high check
check1 takes 0 ms
check2 takes 0ms
Inserting an expanded state into the heap takes 16 clocks
cost too high check
check1 takes 0 ms
check2 takes 0ms
Inserting an expanded state into the heap takes 0 clocks
Я знаю, что трудно сказать что-то о коде, когда этот блок использует функции, которые реализованы в другом месте.но я ошеломлен тем, почему это иногда занимает менее 1 мс, а иногда до 16 мс.Программа должна выполнить этот блок тысячи раз, поэтому эти небольшие икоты действительно сильно замедляют процесс.
Мое единственное предположение, что что-то происходит с вектором в классе кучи, в котором хранятся все эти состояния, но я резервирую место для 100 элементов в конструкторе, используя vector :: reserve, поэтому я не понимаю, как это могловсе еще проблема.
Спасибо!