오픈 코스 (open course) 를 공개한 후에도 종종 문제가 생기는 경우가 있습니다. 오늘 우리는 코드 구조를 최적화하는 것의 중요성에 대해 이야기 할 것입니다.
경매에 있어서 가장 중요한 것은 두 가지가 있습니다. 1) 자금 활용도 2) 경매 속도
서두르는 속도는 일반적으로 거래소의 가까운 서버, 더 나은 네트워크를 구입하는 등의 문제를 해결할 수 있습니다. 그러나 실제로 대부분의 초보자에게는 코드 구조를 최적화하는 것만으로도 전략을 수십 밀리 초 빠르게 만들 수 있으며, 더 나은 네트워크를 바꾸는 것과는 전혀 다르지 않습니다. 그러나 비용은 훨씬 낮습니다.
하지만 한 쌍의 거래만 있을 때, 최적화된 코드 구조는 1ms도 되지 않는 속도로 증가합니다. 거의 차이가 보이지 않습니다.
자금 활용률의 향상, 종종 동일한 자금을 동시에 여러 거래 쌍을 관찰하는 것이 필요합니다. 그러면 논리적 회로 횟수가 증가합니다. 이 때 코드 구조를 최적화하는 것의 이점은 분명합니다. 일반적인 다중 거래소 다중 거래 대 설문조사의 복잡성은 O ((n!) 입니다.*m) ((m) 거래 쌍이 수백에 달하고 거래소가 수십 개를 동시에 관찰할 때
예를 들어, 제가 자주 접하는 한 가지 문제로, A-C와 A-B-C의 두 개의 경매 경로가 있다고 가정해 봅시다. 두 경로는 각각 두 번 계산해야 합니다. 한 번은 경로에서 얻을 수 있는 수익을 계산합니다. p1과 p2를 가정합니다. 한 번은 각 거래소와 거래소별로 표가 필요한 가격과 금액을 계산합니다.
가장 흔한 글쓰기 방식은, 먼저 하나의 함수를 쓰면, 이 함수의 기능은 이윤을 계산하는 것이다. 구체적으로 price와 amount을 언급한다. 그리고는 순환 호출을 통해 이 함수를 호출하고, 각 경로의 profit을 얻은 후, profit 최대를 선택하여 거래를 한다.
이 경우, 이 경우, 이 경우, 이 경우, 이 경우, 이 경우, 이 경우, 이 경우, 이 경우, 이 경우, 이 경우
따라서 최적화할 때, profit과 인출을 2개의 함수로 분할할 수 있다. 먼저 순환 호출하는 profit의 함수를, 각 경로의 profit을 얻으며, 그 다음에는 profit의 최대 거래를 선택한다. 이렇게 논리적으로 인출의 함수는 각 순환에서 호출된다, 한 번만 호출되는 함수가 된다. 시간 복잡도는 O (((2n) 에서 O (((n+1) 으로, n은 매매 경로의 총수이다.
그리고 코드를 더 분석하면, 다른 경매업자가 존재하기 때문에, 어떤 경로에 이익이 있다면, 그 때 다른 사람이 경매하는 경우가 많습니다. 따라서 여러 경로가 동시에 이익이있는 경우는 거의 없습니다.
그래서 우리는 더 나은 전략을 세울 수 있습니다. 순환, 순환 if 문장을 설정합니다. 만약 어떤 경로에 수익이 있는 것을 발견하면, 그 경로에 대한 언급의 수와 가격을 계산합니다.
그러면 복잡도는 O ((n+1) 에서 O ((m+1), m 씩으로 더 단순화 됩니다. 각 거래소들이 동등한 기회를 가질 때 m는 약 n/2 이므로 복잡도는 O ((n/2+1) 로 낮아집니다.
즉, 간단한 분할 함수를 사용하여 논리 최적화 구조를 분석하여 시간 복잡도를 O(2n) 에서 O(n/2+1) 으로 낮출 수 있다.
실제로 코드를 작성할 때, 많은 시나리오를 최적화할 수 있습니다. 제가 코드를 작성할 때, 종종, 작성한 후에, 최적화 논리가 존재할 때 어떤 O (n!) 를 O (n) 로 최적화할 수 있습니다.*(n+1)) 의 가능성. 때로는 몇 백 밀리초 전에 실행된 논리를 1ms 내로 최적화할 수도 있다.
조금만 시간을 투자하면 정책 조사 간격을 줄일 수 있고, 코드 구조를 개선하는 것도 좋습니다.