Вопрос ссылка: https://leetcode.com/contest/biweekly-contest-1/problems/campus-bikes-ii/
Я хочу вычислить сложность этой программы, я думаю, что сложность моего кода равна O (b ^ w), где b - это размер общего велосипеда, а w - размер всего рабочего, хотя я не уверен .
В моей функции "bikeAssign ()", которая в основном работает как dfs, сначала у 1-го работника есть выбор b (всего велосипедов), у 2-го - b-1, поэтому я думаю, что сложность времени будет такой:
(b) (b-1) (b-2) ...... (bw), что почти равно O (b ^ w).
Сложность пространства: O (w) только для dfs (bikeAssign ())
public:
int assignBikes(vector<vector<int>>& workers, vector<vector<int>>& bikes) {
int w = workers.size();
int b = bikes.size();
vector<vector<int> > dist;
//complexity O(w*b)
for( vector<int> worker : workers ) {
vector<int> v;
for( vector<int> bike : bikes ) {
v.push_back( abs(worker[0]-bike[0]) + abs(worker[1]-bike[1]) );
}
dist.push_back(v);
}
vector<int> vis(b,0);
//complexity O(b^w) My calculation
return bikeAssign(dist, vis, 0, w );
}
// COMPLEXITY OF THIS FUNCTION ????
int bikeAssign( vector<vector<int> > &dist, vector<int> &vis, int cnt, int w ) {
if( cnt == w )
return 0;
int res = INT_MAX;
for( int i=0;i<dist[0].size();i++ ) {
if( vis[i] == 0 ) {
vis[i] = 1;
res = min( res, dist[cnt][i] + bikeAssign( dist, vis, cnt+1, w) );
vis[i] = 0;
}
}
return res;
}
};
Это решение принято, но я запутался в сложности. Может ли кто-нибудь помочь мне выяснить-
1. Сложность этой программы с пояснениями.
2. Дайте мне знать, если есть какое-либо другое решение с большей сложностью.
Буду признателен за любую помощь.