이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 13376|회답: 3

[출처] .NET/C# 컬렉션 타입 쿼리 벤치마크

[링크 복사]
게시됨 2022. 3. 7. 오후 4:47:50 | | | |
요구사항: 컬렉션을 추가, 삭제, 수정하지 않고 컬렉션만 쿼리하는 읽기 전용 컬렉션 타입을 정의해야 합니다. 우리는 희망합니다쿼리가 빠를수록 좋습니다

일반적인 집합 비교



알고리즘의 복잡도를 설명할 때, o(1), o(n), o(logn), o(logn), o(logn), o(nlogn), o(nlogn)이 일반적으로 해당 알고리즘의 시간 복잡도를 표현하는 데 사용되며, 이는 알고리즘의 시공간적 복잡도를 표현한 것입니다. 이는 시간적 복잡성을 나타내는 데뿐만 아니라 공간적 복잡도를 나타내는 데에도 사용됩니다.

O는 괄호 안에 함수가 붙어 알고리즘이 소비하는 시간/공간과 성장하는 데이터 양 간의 관계를 나타냅니다. 여기서 n은 입력 데이터의 양을 나타냅니다.

예를 들어, 시간 복잡도가 O(n)라면 데이터 양이 여러 배로 증가하고 시간 소비도 여러 배로 증가함을 의미합니다. 예를 들어, 일반적인 이동 알고리즘 등이 있습니다. 또 다른 예로는 시간 복잡도 O(n^2)가 있는데, 이는 데이터 부피가 n배로 증가하면 n제곱 배를 늘리는 데 시간이 걸리며, 이는 선형보다 더 높은 시간 복잡도입니다. 예를 들어, 버블 정렬은 전형적인 O(n^2) 알고리즘으로, n개의 숫자를 정렬하기 위해 n× n번 스캔해야 합니다.

또 다른 예로는 O(logn)이 있는데, 데이터가 n번 증가하면 logn 시간을 늘리는 데 시간이 걸립니다(여기서 로그는 2를 기준으로 합니다. 예를 들어, 데이터가 256번 증가하면 필요한 시간은 8배만 증가하여 선형보다 짧습니다). 이진 탐색은 O(logn) 알고리즘으로, 찾을 때마다 절반의 가능성을 제거하고, 256개 데이터에서 검색하면 목표를 찾기 위해 8번만 찾으면 됩니다.

O(nlogn)는 동일하며, n에 logn을 곱한 값입니다. 데이터를 256배 늘리면 시간 소비는 256 * 8 = 2048배 증가합니다. 이 복잡도는 제곱 이하의 선형성보다 높습니다. 병합과 정렬은 O(nlogn)의 시간 복잡도입니다.

O(1)는 가장 낮은 시공간 복잡도로, 입력 데이터 크기와 무관하게 소비되는 시간/공간은 변하지 않습니다. 해싱 알고리즘은 전형적인 O(1) 시간 복잡도를 가지며, 데이터가 아무리 크더라도 단일 계산(충돌 여부와 상관없이) 목표를 찾을 수 있습니다.

이 글에서는 BenchmarkDotNet 쌍을 사용합니다List, HashSet, SortedSet, 사전(Dictionary)벤치마킹 문의는 다음을 참고하세요:

.NET/C#은 BenchmarkDotNet을 사용하여 코드 성능을 테스트합니다
https://www.itsvse.com/thread-9576-1-1.html

.NET/C# 반사, 방출, 표현 성능 테스트
https://www.itsvse.com/thread-9598-1-1.html
코드는 다음과 같습니다:

테스트 결과: 사전이나 해시셋에서 키를 찾는 것이 리스트나 정렬셋에서 찾는 것보다 훨씬 빠릅니다. Dictionary와 HashSet 알고리즘의 시간 복잡도는 O(1)이며, 메모리를 절약하기 위해 Dictionary의 값은 우리에게 쓸모가 없으므로 저는 여전히 HashSet 저장소를 선택했습니다.







이전의:[실습] IIS 10 액세스 셋 IP 블랙리스트
다음:ASP.NET 코어(XI) 엔드포인트 경로는 모든 DI 서비스를 표시하는 미들웨어를 추가합니다
게시됨 2022. 3. 7. 오후 11:09:48 |
다시 배우러 왔다.
 집주인| 게시됨 2022. 3. 9. 오전 9:55:12 |
해시셋 테스트


 집주인| 게시됨 2024. 2. 24. 오후 5:45:14 |
.NET/C# 컬렉션 리스트, HashSet을 통해 요소가 벤치마크를 가지고 있는지 판단합니다
https://www.itsvse.com/thread-10735-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com