我需要優化這個功能,但即時通訊難倒的想法,以改善它的速度......優化算法
bool generateShortestpathLink (const string& start, const string& finish, const book& db) {
vector <lib> bks;
vector <string> authors;
set <lib> storeBKS;
set <string> storeAuthor;
queue <pathLink> q;
pathLink p(start);
q.push(p);
while (!q.empty()) {
p = q.front();
if (p.getLength() > 6) return false;
db.getTitles(p.getLastPlayer(), bks);
for (int x = 0; x < (int) bks.size(); x++) {
const film& newBook = bks[x];
if (storeBKS.find(newBook) != storeBKS.end()) continue;
db.getAuthors(newBook, authors);
storeBKS.insert(newBook);
for (int i = 0; i < (int) authors.size(); i++) {
if (storeAuthor.find(authors[i]) != storeAuthor.end()) continue;
pathLink newpathLink(p);
newpathLink.addConnection(newBook, authors[i]);
if (authors[i] == finish) return true;
storeAuthor.insert(authors[i]);
q.push(newpathLink);
}
}
q.pop();
}
return false;
}
它的假設是對BFS,一個算法中它創建用於連接不同的路徑作者的書名。 getTitles()
和getAuthors
都是無法更改的二進制搜索功能。任何人都可以幫助我嗎?
我不能預先分配任何內存給它,因爲我每次都會從頭創建一個不同大小的路徑(取決於每個lvl有多少個連接器分支) – SNpn
然後假設合理的最大路徑大小,預先分配內存,如果事實證明你需要更大的路徑,請擴展緩衝區。 –