당신은 몇 년 동안 이러한 질문을 해왔습니다. 많이 배웠습니까? 죄송합니다. 하지만 두 분이 모두 바이트 열과 기본 배열 수준을 수정하고 그대로 두신 것이 분명합니다.
질문 자체의 표현이 잘못되었습니다. 작업은 중복 값(OGE 수준의 작업)을 제거하는 것이 아니라 더 많은 것, 분명히 유효한 요소 목록을 업데이트하는 것입니다. 그렇다면 질문은 상당히 다르게 들릴 것입니다. 당신은 참가자들, 그리고 무엇보다 당신 자신을 혼란스럽게 하고 오도합니다. 참가자들에게 원칙적으로 잘못된 결정을 부과하고 그것을 효과적으로 만들도록 요청하십시오.
나는 프로그래밍을 위해 프로그래밍을 하지 않으며, 메가 프로그래머가 되고 포럼에서 똑똑해지는 목표가 없습니다.
귀하의 버전은 실제로 가장 빠르지만 버그가 포함되어 있습니다 . 배열의 모든 요소가 필터와 같으면 함수가 배열 외부에서 충돌합니다.
나는 내 자신의 버전을 제공할 것입니다. 속도는 당신보다 약간 열등합니다.
2018.11.13 17:16:38.618 Massiv v1(EURUSD,M1) 테스트 마인=1512090 2018.11.13 17:16:40.083 Massiv v1 (EURUSD,M1) 테스트 외계인=1464941
네 감사합니다. 수정했습니다.
int ArrayDeleteVal( int &a[], constint val) // вариант Semko
{
int size= ArraySize (a);
int i= 0 ,start,s,count;
while (i<size && a[i]!=val) i++; // ищем первый элемент массива со значением valif (i==size) return size;
start=i; i++;
while (i<size && a[i]==val) i++; // ищем элемент массива со значением, не равным valif (i==size) { ArrayResize (a, 0 ); return0 ;}
s=i; i++;
while ( true )
{
while (i<size && a[i]!=val) i++; // ищем элемент массива со значением val
count=i-s;
if (count> 6 ) { ArrayCopy (a,a,start,s,count); start+=count;} // если нужно скопировать более 6 элементов, то имеет смысл воспользоваться ArrayCopyelsefor (; s<i; start++,s++) a[start]=a[s]; // иначе простой циклif (i==size) break ;
i++;
while (i<size && a[i]==val) i++; // ищем элемент массива со значением, не равным valif (i<size) s=i; elsebreak ;
i++;
}
if (start<size) ArrayResize (a,start); else start=size;
return (start);
}
당신에게도 어딘가에 오류가 있습니다. tk. 체크섬이 일치하지 않기 때문에 어딘가에서 하나의 요소를 잃습니다. 이해하지 못했습니다.
2018.11 . 1310 : 07 : 27.757 ArrayDeleteValue (EURUSD,D1) вариант Pastushak: Контрольная сумма = 495782577 ; элементов - 999027 ; время выполнения = 156757 микросекунд
2018.11 . 1310 : 07 : 27.761 ArrayDeleteValue (EURUSD,D1) вариант Korotky: Контрольная сумма = 495782577 ; элементов - 999027 ; время выполнения = 2338 микросекунд
2018.11 . 1310 : 07 : 27.764 ArrayDeleteValue (EURUSD,D1) вариант Fedoseev: Контрольная сумма = 495782577 ; элементов - 999027 ; время выполнения = 1839 микросекунд
2018.11 . 1310 : 07 : 27.766 ArrayDeleteValue (EURUSD,D1) вариант Semko: Контрольная сумма = 495782577 ; элементов - 999027 ; время выполнения = 782 микросекунд
2018.11 . 1310 : 07 : 27.770 ArrayDeleteValue (EURUSD,D1) вариант Pavlov: Контрольная сумма = 495781718 ; элементов - 999026 ; время выполнения = 2886 микросекунд
2018.11 . 1310 : 07 : 27.773 ArrayDeleteValue (EURUSD,D1) вариант Nikitin: Контрольная сумма = 495782577 ; элементов - 999027 ; время выполнения = 2355 микросекунд
for ( int i= 0 ; i< 1000000 ;i++) arr[i]= rand ()% 3 ; // 1000; //генерируем исходный массив случайными значениями от 0 до 1000int Value= rand ()% 3 ; // 1000; // значение, которое нужно удалить из массива
다음과 같이 밝혀졌습니다.
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) 파투샤크 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 108521마이크로초 2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) Korotky 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 5525마이크로초 2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) Fedoseev 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 4879마이크로초 2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) Semko 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 14479마이크로초 2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) Pavlov 변형: 체크섬 = 998744; 요소 - 667421; 런타임 = 0마이크로초 2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) 니키틴 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 5759마이크로초 2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) 블라디미르 옵션: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 1542마이크로초
Pavlov 변종에서 오류가 발생하여 주석 처리해야 했습니다.
결론: 숫자 사이에 임의의 거리가 있는 배열의 주소를 계산하는 것은 행의 요소를 처리하는 것보다 여전히 나쁩니다. 주어진 단계, 특히 1단계에서 컴파일러는 이를 최적화할 수 있습니다.
PS Pascal 및 Delphi용 Borland 컴파일러에서 루프 변수는 루프 실행 동안 (메모리에서) 중요하지 않으며 프로세서 레지스터의 어딘가에 배치됩니다.
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) 파투샤크 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 108521마이크로초 2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) Korotky 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 5525마이크로초 2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) Fedoseev 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 4879마이크로초 2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) Semko 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 14479 마이크로초 2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) Pavlov 변형: 체크섬 = 998744; 요소 - 667421; 런타임 = 0마이크로초 2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) 니키틴 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 5759마이크로초 2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) 블라디미르 옵션: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 1542마이크로초
Pavlov 변종에서 오류가 발생하여 주석 처리해야 했습니다.
결론: 숫자 사이에 임의의 거리가 있는 배열의 주소를 계산하는 것은 행의 요소를 처리하는 것보다 여전히 나쁩니다. 주어진 단계, 특히 1단계에서 컴파일러는 이를 최적화할 수 있습니다.
PS Pascal 및 Delphi용 Borland 컴파일러에서 루프 변수는 루프 실행 동안 (메모리에서) 중요하지 않으며 프로세서 레지스터의 어딘가에 배치됩니다.
Pavlov의 버전이 수정되었습니다. 당신은 이상한 가치를 가지고 있습니다. 프로파일링 후 스크립트를 실행했거나 코드를 다시 컴파일하지 않고 디버거를 실행했습니까? 나는 다음과 같이 얻는다.
2018.11 . 1312 : 35 : 38.633 ArrayDeleteValue (EURUSD,D1) вариант Pastushak: Контрольная сумма = 496494849 ; элементов - 999011 ; время выполнения = 131964 микросекунд
2018.11 . 1312 : 35 : 38.636 ArrayDeleteValue (EURUSD,D1) вариант Korotky: Контрольная сумма = 496494849 ; элементов - 999011 ; время выполнения = 2310 микросекунд
2018.11 . 1312 : 35 : 38.639 ArrayDeleteValue (EURUSD,D1) вариант Fedoseev: Контрольная сумма = 496494849 ; элементов - 999011 ; время выполнения = 1834 микросекунд
2018.11 . 1312 : 35 : 38.641 ArrayDeleteValue (EURUSD,D1) вариант Semko: Контрольная сумма = 496494849 ; элементов - 999011 ; время выполнения = 773 микросекунд
2018.11 . 1312 : 35 : 38.645 ArrayDeleteValue (EURUSD,D1) вариант Pavlov: Контрольная сумма = 496494849 ; элементов - 999011 ; время выполнения = 2815 микросекунд
2018.11 . 1312 : 35 : 38.648 ArrayDeleteValue (EURUSD,D1) вариант Nikitin: Контрольная сумма = 496494849 ; элементов - 999011 ; время выполнения = 2475 микросекунд
2018.11 . 1312 : 35 : 38.653 ArrayDeleteValue (EURUSD,D1) вариант Vladimir: Контрольная сумма = 496656342 ; элементов - 999011 ; время выполнения = 3608 микросекунд
그리고 귀하의 변형에서 잘못된 체크섬을 생성합니다. 그리고 일반적으로 어레이를 추가로 생성하면 이점이 없지만 프로세스가 느려지고 리소스가 추가로 소모됩니다.
MT4가 뭔지도 모르겠고 win10도 하고싶지 않은데 맙소사
힙에 트위스트.
나는 ArrayCopy를 밖으로 몰아야 했다 . MQL5에서 배열이 정적이라고 저주했습니다.

글쎄, 속도면에서 그러한 술 경쟁이 이미 갔다면 내 자신의 버전을 제공 할 것입니다 ...
귀하의 버전은 실제로 가장 빠르지만 버그가 포함되어 있습니다 . 배열의 모든 요소가 필터와 같으면 함수가 배열 외부에서 충돌합니다.
나는 내 자신의 버전을 제공할 것입니다. 속도는 당신보다 약간 열등합니다.
2018.11.13 17:16:38.618 Massiv v1(EURUSD,M1) 테스트 마인=1512090
2018.11.13 17:16:40.083 Massiv v1 (EURUSD,M1) 테스트 외계인=1464941
당신은 몇 년 동안 이러한 질문을 해왔습니다. 많이 배웠습니까? 죄송합니다. 하지만 두 분이 모두 바이트 열과 기본 배열 수준을 수정하고 그대로 두신 것이 분명합니다.
질문 자체의 표현이 잘못되었습니다. 작업은 중복 값(OGE 수준의 작업)을 제거하는 것이 아니라 더 많은 것, 분명히 유효한 요소 목록을 업데이트하는 것입니다. 그렇다면 질문은 상당히 다르게 들릴 것입니다. 당신은 참가자들, 그리고 무엇보다 당신 자신을 혼란스럽게 하고 오도합니다. 참가자들에게 원칙적으로 잘못된 결정을 부과하고 그것을 효과적으로 만들도록 요청하십시오.
나는 프로그래밍을 위해 프로그래밍을 하지 않으며, 메가 프로그래머가 되고 포럼에서 똑똑해지는 목표가 없습니다.
질문에서 명확하지 않은 것은 무엇입니까? 주어진 요소에서 배열을 지우시겠습니까?
귀하의 버전은 실제로 가장 빠르지만 버그가 포함되어 있습니다 . 배열의 모든 요소가 필터와 같으면 함수가 배열 외부에서 충돌합니다.
나는 내 자신의 버전을 제공할 것입니다. 속도는 당신보다 약간 열등합니다.
2018.11.13 17:16:38.618 Massiv v1(EURUSD,M1) 테스트 마인=1512090
2018.11.13 17:16:40.083 Massiv v1 (EURUSD,M1) 테스트 외계인=1464941
네 감사합니다. 수정했습니다.
당신에게도 어딘가에 오류가 있습니다. tk. 체크섬이 일치하지 않기 때문에 어딘가에서 하나의 요소를 잃습니다. 이해하지 못했습니다.
조정, 불필요한 패스 제거
두 경우 모두 각 요소는 최대 한 번만 드래그됩니다.
네, 죄송합니다. 한 번만. 누군가 DBMS에서 접근하는 방식에 관심을 갖고 확인했으면 하는 바람에 기다리지 않았다. 나는 나 자신에게 있었다.
귀하의 검사기 에 ArrayDeleteValue.mq5를 삽입했는데 두 번이나 귀하의 것보다 더 나빠졌습니다. 그 이유를 곰곰이 생각해보고 0.1%가 아닌 1/3의 요소가 삭제되도록 2줄을 수정했습니다.
다음과 같이 밝혀졌습니다.
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) 파투샤크 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 108521마이크로초
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) Korotky 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 5525마이크로초
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) Fedoseev 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 4879마이크로초
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) Semko 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 14479마이크로초
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) Pavlov 변형: 체크섬 = 998744; 요소 - 667421; 런타임 = 0마이크로초
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) 니키틴 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 5759마이크로초
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) 블라디미르 옵션: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 1542마이크로초
Pavlov 변종에서 오류가 발생하여 주석 처리해야 했습니다.
결론: 숫자 사이에 임의의 거리가 있는 배열의 주소를 계산하는 것은 행의 요소를 처리하는 것보다 여전히 나쁩니다. 주어진 단계, 특히 1단계에서 컴파일러는 이를 최적화할 수 있습니다.
PS Pascal 및 Delphi용 Borland 컴파일러에서 루프 변수는 루프 실행 동안 (메모리에서) 중요하지 않으며 프로세서 레지스터의 어딘가에 배치됩니다.
네, 죄송합니다. 한 번만. 누군가 DBMS에서 접근하는 방식에 관심을 갖고 확인했으면 하는 바람에 기다리지 않았다. 나는 나 자신에게 있었다.
귀하의 검사기 에 ArrayDeleteValue.mq5를 삽입했는데 두 번이나 귀하의 것보다 더 나빠졌습니다. 그 이유를 곰곰이 생각해보고 0.1%가 아닌 1/3의 요소가 삭제되도록 2줄을 수정했습니다.
다음과 같이 밝혀졌습니다.
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) 파투샤크 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 108521마이크로초
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) Korotky 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 5525마이크로초
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) Fedoseev 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 4879마이크로초
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) Semko 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 14479 마이크로초
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) Pavlov 변형: 체크섬 = 998744; 요소 - 667421; 런타임 = 0마이크로초
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) 니키틴 변형: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 5759마이크로초
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) 블라디미르 옵션: 체크섬 = 333586; 요소 - 667421; 실행 시간 = 1542마이크로초
Pavlov 변종에서 오류가 발생하여 주석 처리해야 했습니다.
결론: 숫자 사이에 임의의 거리가 있는 배열의 주소를 계산하는 것은 행의 요소를 처리하는 것보다 여전히 나쁩니다. 주어진 단계, 특히 1단계에서 컴파일러는 이를 최적화할 수 있습니다.
PS Pascal 및 Delphi용 Borland 컴파일러에서 루프 변수는 루프 실행 동안 (메모리에서) 중요하지 않으며 프로세서 레지스터의 어딘가에 배치됩니다.
Pavlov의 버전이 수정되었습니다.
당신은 이상한 가치를 가지고 있습니다. 프로파일링 후 스크립트를 실행했거나 코드를 다시 컴파일하지 않고 디버거를 실행했습니까?
나는 다음과 같이 얻는다.
그리고 귀하의 변형에서 잘못된 체크섬을 생성합니다. 그리고 일반적으로 어레이를 추가로 생성하면 이점이 없지만 프로세스가 느려지고 리소스가 추가로 소모됩니다.
나에게만 ArrayCopy 를 사용하는 블록에서 발생하므로 속도 향상이 존재합니다.