알고리즘을 설계하기 전에 생각하는 방법
이전 알고리즘보다 향상된 기능(일반적으로 시간 복잡도)을 갖춘 새로운 알고리즘을 제안하고 발명하는 것은 컴퓨터 과학자입니다. 예를 들어 검색 알고리즘을 살펴보십시오. 마지막에는 새로운 제약 조건이나 입력이 알고리즘에 추가됩니다. 그런 다음 개발자는 이 알고리즘을 사용하고 문제에 맞춰 더 짧은 시간에 작업을 완료합니다.
1단계: 문제 정의
클라이언트 및 프로젝트 관리자와 논의하는 동안 발생하는 문제는 특별히 기술적인 것이 아니며 개발자가 이해할 수 있도록 기술 용어로 번역해야 합니다. 대단하다!
예를 들어 간단한 문제 설명을 살펴보겠습니다.
How many users are coming to the application in a day and going to the checkout page and how many are abandoning it. Consider the timeout to be 300 seconds?
이는 다음과 같이 단축될 수 있습니다.
Classify the checkout session as completed or abandoned if it is inactive for 300 seconds, and then group by this label starting from 00:00:00 UTC to 23:59:59 UTC every day.
2단계: 해결 단계 구성
문제 설명에서 이제 설명을 해석하고 결제 완료 또는 포기와 관련된 단계를 생성할 차례입니다.
3단계: 알고리즘을 통해 자동화
프로그래밍 및 데이터베이스를 사용하여 생성 시간이 현재 시간보다 작고 현재 시간(300초)보다 큰 생성된 모든 체크아웃 세션을 찾으십시오.
이 논리를 구현하기 위해 MongoDB를 사용했습니다. 아래 공유 링크인 놀이터에서 확인하실 수 있습니다. 나는 당신이 그것을 만지고 그것이 어떻게 작동하는지 배우는 것이 좋습니다.
mongoplayground.net
Note This is supposed to be run periodically, therefore we need a cron job like feature in the application which is supposed to be executed at end of the day, everyday (
59 59 23 * * *
)
4단계: 테스트하고 반복적으로 수정
크론 작업이 아직 실행되지 않은 상태에서 일정 시간이 지난 후 고객이 마침내 체크아웃을 완료하면 어떻게 됩니까? 현재 시나리오에서는 이 세션도 중단된 것으로 표시됩니다. 가양성은 이러한 유형의 오류에 대한 용어입니다.
두 번째 오류 유형인 체크아웃 세션이 300초 이상 중단되면 어떻게 됩니까? 이것도 포기한 것으로 간주해야 하지만 현재 논리로는 완료된 것으로 간주합니다. False Negative는 이러한 유형의 오류에 대한 용어입니다.
수정 사항은 무엇입니까?
결제가 완료되면 연결된 주문 ID가 있어야 합니다. 따라서 속성이 문서에 존재하면 체크아웃이 완료된 것이고, 그렇지 않으면 사용자가 포기한 것입니다.
mongoplayground.net
5단계: 솔루션이 효과적이고 효율적인지 확인
재사용 가능한 함수를 만들고 알고리즘이 더미 데이터에서 작동하도록 한 후 실제 데이터에서 동일한 알고리즘을 시도합니다. 이렇게 하면 코드 베이스에 포함할지 여부를 결정하는 데 도움이 됩니다.
function getCheckoutStatus(startDate, endDate) {
return db.collection.aggregate([
{
$match: { // get all the
createdAt: {
$gte: startDate,
$lt: endDate,
},
},
},
{
$addFields: { // set status to completed if orderId exists; otherwise, abandon.
status: {
$cond: ["$orderId", "completed", "abandoned"],
},
},
},
{
$group: { // group and aggregate the count
_id: "$status",
count: {
$sum: 1,
},
},
},
]);
}
이에 상응하는 SQL은 다음과 같을 수 있습니다.
SELECT COUNT(*) AS completed FROM table WHERE `orderId` IS NOT NULL;
SELECT COUNT(*) AS abandoned FROM table WHERE `orderId` IS NULL;
이 단계에서 오류가 발생하면 처음부터 문제를 이해하지 못했다는 의미입니다. 2단계로 돌아가서 과정을 반복합니다.
Reference
이 문제에 관하여(알고리즘을 설계하기 전에 생각하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tbhaxor/how-to-think-before-designing-algorithms-gg9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)