더 나은 알고리즘을 작성하고 더 나은 프로그래머가되는 데 도움이되는 다소 일반적인 수학 공식은 무엇입니까?
예 : 나는 ecludian distance 공식에 대해 배웠습니다. sqrt((x1-x2)^2+(y1-y2)^2)
이것은 두 가지 요소를 비교하여 같은 물체를 찾는 방법을 이해하는 데 도움이되었습니다.
더 나은 알고리즘을 작성하고 더 나은 프로그래머가되는 데 도움이되는 다소 일반적인 수학 공식은 무엇입니까?
예 : 나는 ecludian distance 공식에 대해 배웠습니다. sqrt((x1-x2)^2+(y1-y2)^2)
이것은 두 가지 요소를 비교하여 같은 물체를 찾는 방법을 이해하는 데 도움이되었습니다.
답변:
특히 저수준 비트 연산을 처리 할 때 2의 거듭 제곱을 아는 것이 편리합니다.
setsockopt(...SO_KEEPALIVE..)
읽거나 쓰기보다 꽤 많은 쉽게setsockopt(...16...)
부울 대수는 이미 언급되었지만 실용적인 예제를 제공하고 싶었습니다.
부울 대수는 복잡한 부울 식 ( if
예 : 명령문)으로 작업 할 때 매우 유용합니다 .
몇 가지 유용한 표현과 법칙 :
분포
A & (B | C) = (A & B) | (A & C)
A | (B & C) = (A | B) & (A | C)
다음에 당신은 그런 표현에 걸려 넘어집니다.
if((A || B) && (A || C) && (A || D) && (A || E)) { ... }
쉽게 축소 할 수 있습니다 :
if(A || (B && C && D && E)) { ... }
부정과 드 모건의 법칙
! (! A) = A
! (A & B) =! A | !비
! (A | B) =! A &! B
그런 말을한다고 가정 해 봅시다.
if(!A && !B && !C) {..}
그리고 그 반대를 구축해야합니다. 쓰기:
if(!(!A && !B && !C)) {...}
작동하지만 다음과 같이 멋지지는 않습니다.
if(A | B | C) {...}
(P -> Q) <=> (!P | Q)
. 극소수의 환경에서 논리적 의미 연산자를 제공하므로 항상 사용합니다. 이는 SQL CHECK 제약 조건과 매우 편리한 기능입니다.
내 경험상 수학 공식은 프로젝트에 적용되거나 적용되지 않는 매우 구체적인 계산에 사용됩니다.
무언가를 계산 해야하는 경우 일반적으로 라이브러리 또는 예제 소스 코드에 함수를 사용하여 계산할 수 있습니다. 예를 들어, Excel의 PMT () 함수는 Y 기간 동안 X %의 부채 상환에 필요한 지불을 계산합니다. 실제로 계산 방법을 알고 싶습니까, 아니면 내장 된 것을 호출하는 것으로 충분합니까?
지난 10 년 동안 Ceil (), Min () 및 Max () 이외의 Math 라이브러리의 것을 사용해야 할 필요가 없다고 생각합니다. 컴퓨터가 수학 기반의 문제를 해결하기 위해 고안되었지만 오늘날의 일반적인 사용은 데이터 흐름에 대한 의사 결정입니다.
예를 들어, 방대한 양의 코드가있는 Facebook이 있습니다. 어딘가에 수학이 있을지 모르지만 주로 시스템 라이브러리 인 Crypto API에서 주로 의심됩니다. 그러나 데이터베이스 액세스, 권한 결정, 페이지 작성 및 정보 라우팅은 아마도 많은 수학을 사용하지 않을 것입니다.
그렇습니다. 금융, 물리, 공학 등 많은 수학이 필요한 시장이 있지만,이 산업에서는 주요 분야가 수학 / 경제, 물리, 공학 등일 가능성이 높기 때문에 질문은 '어떻게 쓸 수 있을까요? 언어 Y의 공식 f (x)? '
시간을 잘 사용하는 IMO는 알고리즘 (Big O 표기법 포함)과 디자인 패턴을 조사하는 것입니다.
기본 통계 공식은 알고 있어야합니다. 나는 적어도 몇 번 선형 회귀 를 사용 했습니다.
"무거운"기능에 대한 빠른 근사치를 얻는 데 매우 유용한 Taylor 시리즈 를 언급하고 싶습니다 . 예를 들어 sin(x)
약 0은로 근사 할 수 있습니다 x-(x*x*x/6)
.
일반적으로 마지막 유효 자릿수로 계산하는 대신 빠르게 근사치를 계산하는 영리한 방법이 있다는 아이디어 (초등 함수의 경우 대부분의 최신 프로세서에는 빠른 고정 배선 구현이 포함되어 있으므로 Taylor를 사용하여 죄를 근사화하는 것은 그리 중요하지 않을 수 있습니다) 속도 게인).
부울에 대해 부울 "및"및 "또는"을 변환하는 데 대한 De Morgan의 법칙과 부울 논리 (예 : 이중 부정)에 대한 몇 가지 관련 기본 사항이 있습니다.
"알고리즘이 굉장합니다"대신 "x와 y 사이의 모든 숫자를 합산하는 루프 작성"을 가르치는 학교가 너무 많습니다.
또한 ... https://docs.google.com/viewer?url=http://courses.csail.mit.edu/6.042/fall10/mcs-ftl.pdf
많은 기하학 문제에 매우 중요한 코사인 법칙
특히 각도 결정.
a^2 + b^2 = c^2
프로그래밍은 매우 광범위한 분야입니다. 수학 공식은 어떤 프로그래밍 영역에 있는지에 따라 다릅니다. 그래픽, 게임 프로그래밍에 관심이 있다면 더 많은 삼각법, 기하학을 알아야합니다. 물리, 렌더링, 쉐이더 등의 영역으로 게임 프로그래밍을 세분화 할 수 있습니다. 물리 시뮬레이션 전문가라면 물리와 관련된 것을 알아야합니다.
보안을 유지하고 있다면 수 이론 전문가 여야합니다.
일반적으로, 당신은 이것들과 당신의 관심사 중 어느 것이 든 조합 할 수 있습니다. 학습은 결코 아프지 않습니다.
T (n) = aT (n / b) + f (n), a> = 1, b> 1
마스터 정리 는 프로그래밍에 대해 잘 알고 있습니다. 재귀 알고리즘의 복잡성을 찾는 데 도움이되는 반복 관계를 해결할 수 있습니다. 이것은 "분할 및 정복"스타일 알고리즘을 작성할 때 특히 중요합니다. 대략적으로 말하면, 각 "단계"와 분기 요인의 복잡성을 알고 있다면 마스터 정리를 사용하여 복잡성을 얻을 수 있습니다.
부울 대수를 아는 것이 많은 도움이됩니다. 그것은 당신이 같은 코드를 작성하지 못하게합니다
if (x < 10)
return true;
else
return false;
최적화 문제의 경우 로그 가능성을 이해하는 것이 좋습니다. 예를 들어, 제곱합을 최소화하려는 경우 가능성의 로그를 최대화하는 것과 같습니다 (대략 말하기).
log( Product( exp( -(x[i]-mean)^2 )) )
=
- Sum( (x[i]-mean)^2 )
성능 조정 영역에서 다른 즐겨 찾기는 이항 분포 및 베타 분포입니다. 그들은 계산하기가 매우 간단합니다.
프로그램 상태의 랜덤 타임 샘플 10 개를 가져 와서 F = 40 %의 특정 조건에 있다면 불공평 한 동전을 사용한 동전 던지기 실험과 같습니다. 해당 조건에서 볼 수있는 횟수는 평균 10 * 0.4 = 4이고 표준 편차 sqrt (10 * 0.4 * 0.6) = sqrt (2.4) = 1.55 인 이항 분포입니다.
반면에 10 개의 샘플을 가져 와서 4 개의 샘플에서 해당 조건에서 볼 수 있다면, F가 얼마나 큰지 알려줍니다. 가능한 결과는 0, 1, 2, 3, 4, ..., 9, 10입니다. 그것은 11 가지 가능성이며, (4)는 5 번째 가능성입니다. 따라서 11 개의 균일 한 (0,1) 난수를 취하여 정렬합니다. 다섯 번째 분포는 베타 분포 인 F의 분포입니다. 그 모드는 4/10입니다. 평균은 5/11입니다. 분산은 5 * 6 / (11 ^ 2 * 12) = 0.021이고 표준 편차는 0.144입니다.
많은 사람들이 소프트웨어 성능 문제를 찾고 잘못된 것을 찾는 것을 피하기 위해 많은 수의 샘플이 필요하다고 생각합니다. 이 분포는 적은 수의 샘플이 비용에 대해 많은 것을 보여줄 수 있음을 보여줍니다.