주어진 요소의 배열 지우기 - 페이지 10 1...34567891011121314151617...30 새 코멘트 Алексей Тарабанов 2018.11.13 20:02 #91 하나의 TK에 대해 2개의 코드 옵션을 비교합니다. //+------------------------------------------------------------------+ //| Erase and Resize.mq5 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" //-------------------------------------------------------------------- //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart () { int Arr[ 20 ] = { 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 }; ulong q1 = GetMicrosecondCount (); //-------------------------------- int deleted = 0 ,q = 0 ; //-------------- for ( int a1 = 0 ; a1 < ArraySize (Arr); a1++) { if (deleted)Arr[q] = Arr[q + deleted]; if (Arr[q] == 3 ){deleted++; q--;} q++; } //-------------- ulong q2 = GetMicrosecondCount (); //-------------------------------- //ArrayResize(Arr, ArraySize(Arr) - deleted); //-------------------------------- Print (Arr[ 0 ], "," ,Arr[ 1 ], "," ,Arr[ 2 ], "," ,Arr[ 3 ], "," ,Arr[ 4 ], "," ,Arr[ 5 ], "," ,Arr[ 6 ], "," ,Arr[ 7 ], "," ,Arr[ 8 ], "," ,Arr[ 9 ], "," ,Arr[ 10 ], "," ,Arr[ 11 ], "," ,Arr[ 12 ], "," ,Arr[ 13 ], "," ,Arr[ 14 ], "," ,Arr[ 15 ], "," ,Arr[ 16 ], "," ,Arr[ 17 ], "," ,Arr[ 18 ], "," ,Arr[ 19 ]); Print ( "Array new size " , ArraySize (Arr), " Тime of operation " ,q2-q1, " deleted " ,deleted); //-------------------------------- } //+------------------------------------------------------------------+ 그리고: int Arr[ 20 ] = { 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 }; int deleted; //-------------- for ( int a1 = 0 ; a1 < ArraySize (Arr); a1++) { if (Arr[a1] == 3 ) { if (deleted)a1-= deleted; //Cмещение назад. deleted++; } if (deleted)Arr[a1] = Arr[a1 + deleted]; } //-------------- ArrayResize (Arr, ArraySize (Arr) - deleted); 한 사람이 한 시간이 조금 넘는 간격으로 이것을 쓸 수 있었을까요? 손글씨가 의심스럽다 Алексей Тарабанов 2018.11.13 20:17 #92 Maxim Kuznetsov : Alexey, 당신은 정말로 젊은 인재를 죽이고 있습니다 ... 이 마케터는 5년 동안 판매를 시작할 수 없습니다. 그리고 당신은 프로그래머로서 그가 더 나쁘다고 말합니다. 죄송합니다. 의도하지 않았습니다. Sergey Dzyublik 2018.11.13 21:30 #93 Maxim Kuznetsov : :-) 순서를 지키려고 하지 않으면 시간은 O(1) , 모든 루프의 총 단계 수 = 배열 크기 너무 게으른 코딩 :-) 1. 왼쪽에서 오른쪽으로 첫 번째 3구를 찾고 있습니다. 2. 발견되면 오른쪽에서 왼쪽으로 3이 아닌 항목을 찾습니다. 발견된 항목을 3의 위치에 복사합니다. 1,2가 교차할 때까지 계속하고 복사본 수만큼 배열을 자릅니다. 이념적으로 이것은 "거품 정렬"의 정확히 1/2입니다 :-) 복사하는 대신 스왑을 수행하면 출력이 부분적으로 정렬된 배열이 됩니다(3개 모두 오른쪽으로 이동됨) 모든 루프의 총 단계 수 = 배열 크기는 O(n) 복잡도입니다. 입력 배열이 정렬되면 이진 검색 을 통해 문제가 해결됩니다. 복잡도는 평균 O(log(n))이고 최악의 경우 O(n)입니다. Алексей Тарабанов 2018.11.13 22:12 #94 코딩하기에 너무 게으르면 좋지 않습니다. Реter Konow 2018.11.14 06:40 #95 Nikolai Semko : 그럼에도 불구하고 그는 Peter의 옵션을 마스터했습니다. 아주 컴팩트하고 제대로 작동합니다. 피터에게 경의를 표합니다. 그러나 속도면에서는 끝에서 두 번째입니다. 또는이 지점 소유자의 원래 버전을 제외하고 속도에 완전히 부적합한 끝에서 첫 번째 장소. 테스트는 어떻게 하셨나요? Konstantin Nikitin 2018.11.14 07:54 #96 그가 던진 옵션이 아니라 마지막. 무엇이든 버스트해야합니다. Nikolai Semko 2018.11.14 08:09 #97 Реter Konow : 테스트는 어떻게 하셨나요? 코드를 배우십시오. 2018.11 . 14 03 : 26 : 49.182 ArrayDeleteValue (BTCUSD,M15) вариант Pastushak: Контрольная сумма = 496575839 ; элементов - 998974 ; время выполнения = 131158 микросекунд 2018.11 . 14 03 : 26 : 49.185 ArrayDeleteValue (BTCUSD,M15) вариант Korotky: Контрольная сумма = 496575839 ; элементов - 998974 ; время выполнения = 2431 микросекунд 2018.11 . 14 03 : 26 : 49.188 ArrayDeleteValue (BTCUSD,M15) вариант Fedoseev: Контрольная сумма = 496575839 ; элементов - 998974 ; время выполнения = 1809 микросекунд 2018.11 . 14 03 : 26 : 49.190 ArrayDeleteValue (BTCUSD,M15) вариант Semko: Контрольная сумма = 496575839 ; элементов - 998974 ; время выполнения = 785 микросекунд 2018.11 . 14 03 : 26 : 49.194 ArrayDeleteValue (BTCUSD,M15) вариант Pavlov: Контрольная сумма = 496575839 ; элементов - 998974 ; время выполнения = 2839 микросекунд 2018.11 . 14 03 : 26 : 49.199 ArrayDeleteValue (BTCUSD,M15) вариант Nikitin: Контрольная сумма = 496575839 ; элементов - 997971 ; время выполнения = 4049 микросекунд 2018.11 . 14 03 : 26 : 49.204 ArrayDeleteValue (BTCUSD,M15) вариант Vladimir: Контрольная сумма = 496575839 ; элементов - 998974 ; время выполнения = 3888 микросекунд 2018.11 . 14 03 : 26 : 49.212 ArrayDeleteValue (BTCUSD,M15) вариант Peter: Контрольная сумма = 496575839 ; элементов - 998974 ; время выполнения = 7597 микросекунд 파일: ArrayDeleteValue.mq5 17 kb Maxim Kuznetsov 2018.11.14 08:30 #98 Алексей Тарабанов : 코딩하기에 너무 게으르면 좋지 않습니다. 완전히 게으른 것은 아니지만 MT는 VDS에서만 사용할 수 있지만 실험하지는 않습니다. 다음과 같이 다소: template < typename T> int arrayFilter( const T &arr[], const T x) { int i= 0 ; int j= ArraySize (arr)- 1 ; for (;;) { while (arr[i]!=x && i<j) i++; while (arr[j]==x && i<j) j--; if (i<j) { arr[i++]=arr[j--]; } else break ; } ArrayResize (j+ 1 ); return j+ 1 ; } +- 1 :-) 며칠내로 다차에서 돌아와서 확인해볼께요.. 추신. 게다가 코드에는 완료 시 루프에 대한 추가 항목이 있습니다. .. 사소한 일이지만 제거할 수 있습니다. Nikolai Semko 2018.11.14 08:53 #99 Maxim Kuznetsov : 완전히 게으른 것은 아니지만 MT는 VDS에서만 사용할 수 있지만 실험하지는 않습니다. 다음과 같이 다소: +- 1 :-) 며칠내로 다차에서 돌아오겠습니다 확인하겠습니다.. 추신. 게다가 코드에는 완료 시 루프에 대한 추가 항목이 있습니다. .. 사소한 일이지만 제거할 수 있습니다. 브라보! 몇 가지 버그를 수정한 후 ArrayCopy 를 사용 하지 않고도 저를 받침대에서 떨어뜨렸습니다. 장군. :)) template < typename T> int arrayFilter3(T &arr[], const T x) // вариан Kuznetsov { int i= 0 ; int j= ArraySize (arr)- 1 ; for (;;) { while (arr[i]!=x && i<j) i++; while (arr[j]==x && i<j) j--; if (i<j) { arr[i++]=arr[j--]; } else break ; } ArrayResize (arr,j+ 1 ); return j+ 1 ; } 2018.11 . 14 03 : 48 : 29.572 ArrayDeleteValue (USDRUB,M1) вариант Pastushak: Контрольная сумма = 496206996 ; элементов - 999002 ; время выполнения = 131929 микросекунд 2018.11 . 14 03 : 48 : 29.576 ArrayDeleteValue (USDRUB,M1) вариант Korotky: Контрольная сумма = 496206996 ; элементов - 999002 ; время выполнения = 2411 микросекунд 2018.11 . 14 03 : 48 : 29.579 ArrayDeleteValue (USDRUB,M1) вариант Fedoseev: Контрольная сумма = 496206996 ; элементов - 999002 ; время выполнения = 1839 микросекунд 2018.11 . 14 03 : 48 : 29.581 ArrayDeleteValue (USDRUB,M1) вариант Semko: Контрольная сумма = 496206996 ; элементов - 999002 ; время выполнения = 782 микросекунд 2018.11 . 14 03 : 48 : 29.585 ArrayDeleteValue (USDRUB,M1) вариант Pavlov: Контрольная сумма = 496206996 ; элементов - 999002 ; время выполнения = 2813 микросекунд 2018.11 . 14 03 : 48 : 29.590 ArrayDeleteValue (USDRUB,M1) вариант Nikitin: Контрольная сумма = 496206996 ; элементов - 997969 ; время выполнения = 4200 микросекунд 2018.11 . 14 03 : 48 : 29.596 ArrayDeleteValue (USDRUB,M1) вариант Vladimir: Контрольная сумма = 496206996 ; элементов - 999002 ; время выполнения = 3597 микросекунд 2018.11 . 14 03 : 48 : 29.604 ArrayDeleteValue (USDRUB,M1) вариант Peter: Контрольная сумма = 496206996 ; элементов - 999002 ; время выполнения = 7684 микросекунд 2018.11 . 14 03 : 48 : 29.606 ArrayDeleteValue (USDRUB,M1) вариант Kuznetsov: Контрольная сумма = 496206996 ; элементов - 999002 ; время выполнения = 681 микросекунд 파일: ArrayDeleteValue.mq5 18 kb Nikolai Semko 2018.11.14 09:29 #100 Nikolai Semko : 브라보! 몇 가지 오류를 수정한 후 ArrayCopy를 사용하지 않고도 저를 받침대에서 떨어뜨렸습니다. 장군. :)) 진실은 그렇지 않기 때문입니다. 출력에서 배열은 완전히 다릅니다. 이미 혼합되어 있습니다. 하지만 여전히 멋지다! 따옴표를 다루는 경우 물론이 옵션은 적합하지 않습니다. 나는 받침대로 돌아왔다. )) 체크섬 계산 방식을 변경했습니다. 더 이상 모든 요소의 단순 합이 아니라 합계 - (요소 값) / (요소 번호)입니다. 그리고 일어난 일은 다음과 같습니다. 2018.11 . 14 04 : 20 : 26.063 ArrayDeleteValue (USDRUB,M1) вариант Pastushak: Контрольная сумма = 7090.600736767353 ; элементов - 999003 ; время выполнения = 132291 микросекунд 2018.11 . 14 04 : 20 : 26.067 ArrayDeleteValue (USDRUB,M1) вариант Korotky: Контрольная сумма = 7090.600736767353 ; элементов - 999003 ; время выполнения = 2322 микросекунд 2018.11 . 14 04 : 20 : 26.071 ArrayDeleteValue (USDRUB,M1) вариант Fedoseev: Контрольная сумма = 7090.600736767353 ; элементов - 999003 ; время выполнения = 1831 микросекунд 2018.11 . 14 04 : 20 : 26.074 ArrayDeleteValue (USDRUB,M1) вариант Semko: Контрольная сумма = 7090.600736767353 ; элементов - 999003 ; время выполнения = 773 микросекунд 2018.11 . 14 04 : 20 : 26.079 ArrayDeleteValue (USDRUB,M1) вариант Pavlov: Контрольная сумма = 7090.600736767353 ; элементов - 999003 ; время выполнения = 2879 микросекунд 2018.11 . 14 04 : 20 : 26.085 ArrayDeleteValue (USDRUB,M1) вариант Nikitin: Контрольная сумма = 7093.903216084301 ; элементов - 998017 ; время выполнения = 3605 микросекунд 2018.11 . 14 04 : 20 : 26.090 ArrayDeleteValue (USDRUB,M1) вариант Vladimir: Контрольная сумма = 7090.600736767353 ; элементов - 999003 ; время выполнения = 3622 микросекунд 2018.11 . 14 04 : 20 : 26.100 ArrayDeleteValue (USDRUB,M1) вариант Peter: Контрольная сумма = 7090.600736767353 ; элементов - 999003 ; время выполнения = 7252 микросекунд 2018.11 . 14 04 : 20 : 26.102 ArrayDeleteValue (USDRUB,M1) вариант Kuznetsov: Контрольная сумма = 7085.49357433088 ; элементов - 999003 ; время выполнения = 691 микросекунд 파일: ArrayDeleteValue.mq5 18 kb 1...34567891011121314151617...30 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
하나의 TK에 대해 2개의 코드 옵션을 비교합니다.
그리고:
한 사람이 한 시간이 조금 넘는 간격으로 이것을 쓸 수 있었을까요? 손글씨가 의심스럽다Alexey, 당신은 정말로 젊은 인재를 죽이고 있습니다 ...
이 마케터는 5년 동안 판매를 시작할 수 없습니다. 그리고 당신은 프로그래머로서 그가 더 나쁘다고 말합니다.
죄송합니다. 의도하지 않았습니다.
:-) 순서를 지키려고 하지 않으면 시간은 O(1) , 모든 루프의 총 단계 수 = 배열 크기
너무 게으른 코딩 :-)
1. 왼쪽에서 오른쪽으로 첫 번째 3구를 찾고 있습니다.
2. 발견되면 오른쪽에서 왼쪽으로 3이 아닌 항목을 찾습니다. 발견된 항목을 3의 위치에 복사합니다.
1,2가 교차할 때까지 계속하고 복사본 수만큼 배열을 자릅니다.
이념적으로 이것은 "거품 정렬"의 정확히 1/2입니다 :-) 복사하는 대신 스왑을 수행하면 출력이 부분적으로 정렬된 배열이 됩니다(3개 모두 오른쪽으로 이동됨)
모든 루프의 총 단계 수 = 배열 크기는 O(n) 복잡도입니다.
입력 배열이 정렬되면 이진 검색 을 통해 문제가 해결됩니다.
복잡도는 평균 O(log(n))이고 최악의 경우 O(n)입니다.
그럼에도 불구하고 그는 Peter의 옵션을 마스터했습니다.
아주 컴팩트하고 제대로 작동합니다. 피터에게 경의를 표합니다.
그러나 속도면에서는 끝에서 두 번째입니다. 또는이 지점 소유자의 원래 버전을 제외하고 속도에 완전히 부적합한 끝에서 첫 번째 장소.
테스트는 어떻게 하셨나요?
테스트는 어떻게 하셨나요?
코드를 배우십시오.
코딩하기에 너무 게으르면 좋지 않습니다.
완전히 게으른 것은 아니지만 MT는 VDS에서만 사용할 수 있지만 실험하지는 않습니다.
다음과 같이 다소:
+- 1 :-) 며칠내로 다차에서 돌아와서 확인해볼께요..
추신. 게다가 코드에는 완료 시 루프에 대한 추가 항목이 있습니다. .. 사소한 일이지만 제거할 수 있습니다.
완전히 게으른 것은 아니지만 MT는 VDS에서만 사용할 수 있지만 실험하지는 않습니다.
다음과 같이 다소:
+- 1 :-) 며칠내로 다차에서 돌아오겠습니다 확인하겠습니다..
추신. 게다가 코드에는 완료 시 루프에 대한 추가 항목이 있습니다. .. 사소한 일이지만 제거할 수 있습니다.
브라보! 몇 가지 버그를 수정한 후 ArrayCopy 를 사용 하지 않고도 저를 받침대에서 떨어뜨렸습니다. 장군. :))
브라보! 몇 가지 오류를 수정한 후 ArrayCopy를 사용하지 않고도 저를 받침대에서 떨어뜨렸습니다. 장군. :))
진실은 그렇지 않기 때문입니다. 출력에서 배열은 완전히 다릅니다. 이미 혼합되어 있습니다. 하지만 여전히 멋지다!
따옴표를 다루는 경우 물론이 옵션은 적합하지 않습니다. 나는 받침대로 돌아왔다. ))
체크섬 계산 방식을 변경했습니다. 더 이상 모든 요소의 단순 합이 아니라 합계 - (요소 값) / (요소 번호)입니다.
그리고 일어난 일은 다음과 같습니다.