주어진 요소의 배열 지우기 - 페이지 12

 
Alexey Viktorov :

따라서 주문이 마감되면 어레이에서 "삭제"해야 합니다. 이러한 경우 배열을 "자체로" 복사하고 차원을 1로 줄이는 방법을 사용했습니다.

이 경우 -1 배열에 존재하지 않는 티켓을 작성하고 모든 주문이 닫힐 때까지 기다렸다가 전체 배열을 삭제했습니다(배열의 크기를 =1로 설정).

이 접근 방식 을 사용하면 티켓 배열의 요소 (주문이 없는 경우)는 단 하나의 조건으로 검사됩니다. if(ArrayOfTicket[i] > 0) .....

IMHO는 어레이를 지속적으로 "흔들기"보다 훨씬 빠릅니다.

 
Igor Makanu :

이 경우 -1 배열에 존재하지 않는 티켓을 작성하고 모든 주문이 닫힐 때까지 기다렸다가 전체 배열을 삭제했습니다(배열의 크기를 =1로 설정).

이 접근 방식 을 사용하면 티켓 배열의 요소 (주문이 없는 경우)는 단 하나의 조건으로 검사됩니다. if(ArrayOfTicket[i] > 0) .....

IMHO는 어레이를 지속적으로 "흔들기"보다 훨씬 빠릅니다.

나는 아무것도 이해하지 못했습니다 ... 그리고 차이점은 요소별로 삭제하거나 존재하지 않는 주문의 인덱스를 확인하는 것입니다 ... 어쨌든 배열이 엉망이됩니다 ...

일반적으로 오늘 뉴스에서 말했듯이 맛을 특허하는 것은 불가능합니다. 펠트 펜은 색상만 다를 뿐 맛은 모두 같습니다.

 
Alexey Viktorov :

나는 아무것도 이해하지 못했습니다 ... 그리고 차이점은 요소별로 삭제하거나 존재하지 않는 주문의 인덱스를 확인하는 것입니다 ... 어쨌든 배열이 엉망이됩니다 ...

일반적으로 오늘 뉴스에서 말했듯이 맛을 특허하는 것은 불가능합니다. 펠트 펜은 색상만 다를 뿐 맛은 모두 같습니다.

요소를 삭제한다는 것은 배열의 나머지 요소를 복사하는 것을 의미하며 배열의 요소를 삭제하지 않고 존재하지 않는 요소(티켓)를 값 -1로 표시하고 시장가 주문이 없을 때 티켓 배열을 삭제합니다

펠트 펜의 경우 작업에 따라 다릅니다. 원칙적으로 최적화할 때 일반적으로 2가지 솔루션이 있습니다.

- 또는 알고리즘의 복잡성을 추가하지만 메모리를 절약하고 PC 컴퓨팅 리소스 를 낭비합니다.

- 또는 알고리즘을 단순화하고 컴퓨팅 리소스를 절약하지만 메모리를 소비합니다.

 

체크섬은 올바른 것으로 간주되지 않습니다. 어레이에 0이 있으면 오류가 있을 수 있습니다.

Nikitin의 변형은 그러한 실수에 대해 작동합니다.

파일:
456.mq5  20 kb
 
Vladimir Pastushak :

체크섬은 올바른 것으로 간주되지 않습니다. 어레이에 0이 있으면 오류가 있을 수 있습니다.

Nikitin의 변형은 그러한 실수에 대해 작동합니다.

그래, 너가 맞아. Nikitin만이 추가로 0원소를 던졌습니다. 이것이 그의 코드가 잘못된 것처럼 보이는 이유입니다. 사실, 당신이 원래 설정 한 작업이 해결되었습니다.
null 요소에 대한 검사를 문서화하면 결과는 동일합니다.

 2018.11 . 14 13 : 50 : 34.481 ArrayDeleteValue (BTCUSD,M15)   вариант Pastushak: Контрольная сумма = 7192.975450836821 ; элементов - 998993 ; время выполнения = 133765 микросекунд
2018.11 . 14 13 : 50 : 34.486 ArrayDeleteValue (BTCUSD,M15)   вариант Korotky:   Контрольная сумма = 7192.975450836821 ; элементов - 998993 ; время выполнения = 2330 микросекунд
2018.11 . 14 13 : 50 : 34.489 ArrayDeleteValue (BTCUSD,M15)   вариант Fedoseev:  Контрольная сумма = 7192.975450836821 ; элементов - 998993 ; время выполнения = 1840 микросекунд
2018.11 . 14 13 : 50 : 34.492 ArrayDeleteValue (BTCUSD,M15)   вариант Semko:     Контрольная сумма = 7192.975450836821 ; элементов - 998993 ; время выполнения = 777 микросекунд
2018.11 . 14 13 : 50 : 34.497 ArrayDeleteValue (BTCUSD,M15)   вариант Pavlov:    Контрольная сумма = 7192.975450836821 ; элементов - 998993 ; время выполнения = 2818 микросекунд
2018.11 . 14 13 : 50 : 34.503 ArrayDeleteValue (BTCUSD,M15)   вариант Nikitin:   Контрольная сумма = 7192.975450836821 ; элементов - 998993 ; время выполнения = 3922 микросекунд
2018.11 . 14 13 : 50 : 34.510 ArrayDeleteValue (BTCUSD,M15)   вариант Vladimir:  Контрольная сумма = 7192.975450836821 ; элементов - 998993 ; время выполнения = 4239 микросекунд
2018.11 . 14 13 : 50 : 34.519 ArrayDeleteValue (BTCUSD,M15)   вариант Peter:     Контрольная сумма = 7192.975450836821 ; элементов - 998993 ; время выполнения = 7307 микросекунд
2018.11 . 14 13 : 50 : 34.522 ArrayDeleteValue (BTCUSD,M15)   вариант Kuznetsov: Контрольная сумма = 7185.677992388435 ; элементов - 998993 ; время выполнения = 683 микросекунд

나는 이제 체크섬이 이전에 고려하지 않았던 요소의 순서를 고려한다는 것을 반복합니다.

파일:
 
예, 그의 콧수염입니다. 여기서 맥주를 만들고 있어요. NG로 ~ 25리터가 준비됩니다. 이것이 사실이며 당신은 모두 배열에 관한 것입니다.
 
Nikolai Semko :

그래, 너가 맞아. Nikitin만이 추가로 0원소를 던졌습니다. 이것이 그의 코드가 잘못된 것처럼 보이는 이유입니다. 사실, 당신이 원래 설정 한 작업이 해결되었습니다.
null 요소에 대한 검사를 문서화하면 결과는 동일합니다.

나는 이제 체크섬이 이전에 고려하지 않았던 요소의 순서를 고려한다는 것을 반복합니다.

그건 그렇고, 순서가 매우 중요하면 마지막 에 ArraySort를 내 버전에 추가 할 수 있으며 동시에 ArraySort가 일반적으로 얼마나 효과적인지 볼 수 있습니다.

 

지금은 답을 찾을 수 없는 다른 질문에 관심이 있습니다.
아마도 누군가 Kuznetsov의 코드에서 그러한 옵션을 설명할 수 있습니다.

     for (;;)
     {
       while (arr[i]!=x && i<j) i++;
       while (arr[j]==x && i<j) j--;
       if (i<j)
        {
         arr[i++]=arr[j--];
        }
       else break ;
     }

정확히 동일한 작업을 수행하는 이것보다 두 배 이상 빠르게 작동합니다.

   while (i<j)
     {
       if (arr[i]==x)
         if (arr[j]!=x) arr[i++]=arr[j--];
       else j--;
       else i++;
     }

컴파일러의 놀라운 점은 무엇입니까?
정말 그런 디자인을 위해:

 while (arr[i]!=x && i<j) i++;

컴파일러가 프로세서에 대한 특별한 어셈블러 검색 명령을 찾았습니까?
현대 프로세서 명령어에 강한 사람이 있습니까?

 
Maxim Kuznetsov :

그건 그렇고, 순서가 매우 중요하다면 마지막에 ArraySort를 내 버전에 추가할 수 있으며 동시에 ArraySort가 일반적으로 얼마나 효과적인지 볼 수 있습니다.

나는 그와 함께 시도했다. 상당히 비용이 많이 드는 기능입니다. 나중에 버리는 것이 더 쉽지만. 필요한 모든 것이 연속적으로 진행됩니다.


니콜라이 셈코 :

그래, 너가 맞아. Nikitin만이 추가로 0원소를 던졌습니다. 그것이 그의 코드가 잘못된 것처럼 보이는 이유입니다. 사실, 당신이 원래 설정 한 작업이 해결되었습니다.
null 요소에 대한 검사를 문서화하면 결과는 동일합니다.

예, 이 경우 거의 모든 기능을 조정할 수 있습니다. 여기 내 최신 버전 이 있습니다(순전히 실험적이었지만 가장 저렴한 것 중 하나인 것 같습니다.)
 template < typename T>
int arrayFilter(T &data[], const T value= NULL )
  {
     int s, _s = s = ArraySize (data);
     bool result = false ;
     
     for ( int i= 0 , j= 0 ; i<_s; i++)
     {
           if ( data[i] == value || data[i] == NULL )
          {
               result = true ;
               s--;
               continue ;
          }
           if ( result )
               data[j] = data[i];
          j++;
     }
     
     if (s < _s)
           ArrayResize (data, s);
     
     return s;
  }
 
Nikolai Semko :

:

정확히 동일한 작업을 수행하는 이것보다 두 배 이상 빠르게 작동합니다.


옵티마이저는 쓸모가 없습니다. 비교는 2배 미만입니다.