예를 들어 1000개의 주문과 같이 100만 개의 고유 식별자로 구성된 배열이 있다고 상상해 보십시오. 이 천 주문 중 번호가 N인 주문이 하나 있는지 확인하는 방법은 무엇입니까? 일반 클래스 중 하나를 사용하는 경우 이 작업 은 검색이 수행되는 요소의 수에 의존하지 않는 일정한 시간 내에 거의 즉시 완료될 수 있습니다.
주제에 완전히 익숙하지 않습니다. 그러나 강조 표시된 것은 비논리적으로 들립니다.
불행히도, 도서관은 막 나왔고 여전히 축축합니다. 나는 이미 첫 번째 오류를 발견했습니다(저는 마커로 오류를 강조 표시할 것입니다. 중요합니다).
CSortedSet의 오류:
//+------------------------------------------------------------------+ //| Class CSortedSet<T>. | //| Usage: Represents a collection of objects that is maintained in | //| sorted order. | //+------------------------------------------------------------------+ template < typename T> class CSortedSet: public ISet<T> { ... bool TryGetMin(T &min) { return (m_tree. TryGetMin (min)); } bool TryGetMax(T &max) { return (m_tree. TryGetMin (max)); } ... }
TryGetMax 메서드는 TryGetMin과 마찬가지로 최대 요소를 반환하지 않고 최소값을 반환합니다.
... 그러나 강조 표시된 것은 비논리적으로 들립니다.
왜요?
왜요?
해시를 만들고 오름차순으로 정렬합니다. 그러나 어떤 경우에도 검색됩니다.
주제에 완전히 익숙하지 않습니다. 그러나 강조 표시된 것은 비논리적으로 들립니다.
해시를 만드세요...
용어를 정의합시다. 즉각적인 것은 없습니다. 모든 작업에는 시간이 걸립니다. 즉석 에서 말할 때는 초보 프로그래머가 이해할 수 있도록 단순화합니다. 엄밀히 말하면, 여러 복잡도 클래스 가 있으며 우리가 다룰 주요 클래스는 다음과 같습니다.
- 상수 복잡도 c O(1) .
- 로그: O ( log n) .
- 선형: c O(n) .
- 비선형 실행 시간이 필요한 알고리즘.
해시 및 기타 기술적 조작을 계산할 때 발생하는 일종의 상수로 기호 c 를 의도적으로 도입했습니다. 그러나 이 경우 상수 c 최적화에 대한 논의는 이 스레드에서 다루지 않습니다. 우리는 제네릭 클래스와 실제 적용에만 관심이 있습니다.
해시를 만들고 오름차순으로 정렬합니다. 그러나 어떤 경우에도 검색됩니다.
평균 O(1) 시간은 O(n)보다 나쁘고 성능은 해시에 크게 의존합니다.
+
ps 예시로 CHashMap으로 작업하는 것이 잘못된 경우 이 성능이 바로 O(n)으로 떨어지는 예를 아래에 제시하겠습니다.
매우 명확하게 작성
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
일반 클래스 라이브러리 - 버그, 설명, 질문, 사용법 및 제안
fxsaber , 2017.12.07 12:43
강조 표시된 소리가 비논리적으로 들립니다.
강조 표시된 내용을 참조하십시오.
나는 이름을 단순화하여 더 논리적으로 만들 것을 제안합니다. 예를 들어, CArrayList 는 여전히 mql5의 Array 또는 List입니다. 둘 다 구현되어 있습니까?
이 모든 것은 질문과 오해를 불러일으킨다. IMHO, C # 또는 Java가 아닌 stl에서 깎는 것이 필요합니다. 또는 C보다 먼저 제거하고 ArrayList로 두십시오.
일반 이름을 만드는 경우:
- 가독성이 크게 향상됩니다.
- 고유한 mql5 스타일을 그립니다.
- 초보자는 즉시 코드를 탐색할 수 있습니다(stl이 표준에 포함되어 있기 때문에)
...
2017년 12월 6일부터 메타트레이더 5의 표준 제공에는 데이터 저장 및 검색을 위한 효율적인 알고리즘을 구현하는 소위 일반 클래스가 포함되었습니다. 이 스레드는 이러한 클래스와 해당 클래스를 사용한 작업 예제 및 작업 개선을 위한 제안을 설명하기 위해 작성되었습니다.
제네릭이란 무엇인가 요? 제네릭 클래스는 사용자 정의 데이터 유형을 저장할 수 있는 특수 템플릿 클래스입니다. 컴파일 시 유형 식별이 수행되므로 높은 성능을 제공합니다.
왜 제네릭인가요? 일반적으로 초보 프로그래머는 배열이라는 하나의 컬렉션 유형에만 익숙합니다. 그러나 배열로 작업하는 것이 비효율적인 작업이 많습니다. 예를 들어 천 개의 주문과 같이 백만 개의 고유 식별자로 구성된 배열이 있다고 상상해 보세요. 이 천 개의 주문 중 번호가 N인 주문이 하나 있는지 어떻게 확인할 수 있을까요? 일반 클래스 중 하나를 사용하면 이 작업을 거의 즉시, 일정한 시간 동안 수행할 수 있으며 검색이 수행되는 요소의 수에 의존하지 않습니다. 일반 컬렉션의 올바른 알고리즘이 프로그래머가 개발한 알고리즘보다 더 빠를 수 있는 다른 작업도 있습니다.
일반 알고리즘. 아래는 일반 클래스의 표로, 각 클래스의 기능에 대한 간략한 설명이 나와 있습니다:
나중에 계속하여 이러한 클래스의 구현 기능을 살펴보겠습니다.