방법은의 시간 복잡도를 계산하는 방법 :이 이상한 방법
List<Book> books = new List<Book>();
public List<Book> Shoot()
{
foreach(var b in books)
{
bool find = true;
foreach(var otherb in books)
{
if(otherb != b && otherb.Author == b.Author)
{
find = false;
}
}
if(find)
{
yield return b;
}
}
}
일반적으로, 시간 복잡도가 O 것 (books.Count^2)하지만, 경우 (찾기) 문이있다 바깥 쪽 루프에 있고 루프 시간이 변경 될 수 있습니다.
그래서 제 질문은 다음과 같습니다
- 이 방법의 시간 복잡도는 무엇입니까?
- 어떻게 계산 했습니까?
답변을 기다리고 있습니다.
미리 감사드립니다.
'find' 변수는 실행 시간을 O (books.Count^2)보다 작은 O (books.Count) 이하로 변경합니다. 따라서 총 복잡도는 여전히 O입니다 (책. 개수^2). –
두 개의 중첩 루프, big oh n x n. 더 행복하게 만들고 싶다면 작성자별로 정렬하십시오. –
이것이 관련성이 있는지는 잘 모르겠지만 일반적으로 종속성 정렬을 수행 할 때 찾을 수 있지만 중첩 된 루프는 의심스러운 외부에있는 경우에는 찾습니다. 나는 그 질문이 "우리가 실제로 여기서하려고하는 것이 무엇인지, 아마도 우리가 훨씬 더 잘할 수있는 것"인만큼 "시간 복잡성은 무엇인가"라는 것만 확신하지는 못합니다. 원한다면 비즈니스가 당신에게 무엇을 요구하고 있는지 알려주고 좀 더 단순한 방법을 찾을 수있을 것입니다. –