2012-02-10 19 views
6

Jaka jest złożoność następującego kodu?Jaka jest złożoność set_intersection w C++?

set<int> S1, S2, ans; 
set_intersection(S1.begin(), S1.end(), S2.begin(), S2.end(), inserter(ans, ans.begin())) 

gdzie S1 i S2 kilka zestawów non_empty i ans jest zbiorem pustym.

Wiem, że wstawienie posortowanego zakresu do zestawu jest liniowe; ale wstawia za pomocą liniowego insertera?

Odpowiedz

7

Wprowadzający zapamiętuje miejsce ostatniego wstawienia każdego przedmiotu i próbuje wstawić następny element w tym samym miejscu. To jest O (1), jeśli jest to właściwe miejsce.

Co oznacza, że ​​skopiowanie posortowanego zakresu do insertera jest ogólnie liniowe, więc jesteś tutaj dobry.

+0

Jestem nieco zdezorientowany: czy nie jest stała O (1) zamiast liniowa? –

+1

@ AntonioPérez: Jest stały w trakcie wstawiania; liniowy ogółem. –