프로그래밍에 대해 알아야 할 좋은 수학 공식은 무엇입니까? [닫은]


19

더 나은 알고리즘을 작성하고 더 나은 프로그래머가되는 데 도움이되는 다소 일반적인 수학 공식은 무엇입니까?

예 : 나는 ecludian distance 공식에 대해 배웠습니다. sqrt((x1-x2)^2+(y1-y2)^2)이것은 두 가지 요소를 비교하여 같은 물체를 찾는 방법을 이해하는 데 도움이되었습니다.


2
나는 그것이 유클리드 거리 공식이라고 생각하지 않습니다.
Greg Hewgill

@Larry @Greg가 편집되었습니다.
GSto

haha
피보

1
완료 날짜 = (예상 날짜 + 남은 일수 / 2) ^ (근무 시간 / 재택 시간) * 무료 피자 수
Skizz

7
거리 를 비교 해야하는 경우 sqrt단계를 건너 뛸 수 있다는 것을 알고 있으면 흥미로울 것입니다 . 내부 루프가 빡빡하면 문제가 될 수 있습니다.

답변:


16

특히 저수준 비트 연산을 처리 할 때 2의 거듭 제곱을 아는 것이 편리합니다.


+1-베이스 2, 16, 10 및 8로 변환 할 수 있어야합니다.
mouviciel

2
base-8에 대해 잘 모르겠지만 2, 16 및 10 개의 전환에 동의합니다. 합리적인 시간 내에이를 수행 할 수 있어야하지만 반드시 즉각적인 것은 아닙니다.
시크릿

내 선생님은 16 진수 동물입니다. 그의 말도 우스운 숫자로 개종하고 나는 1 년 정도 그를 위해 TA였으며, 수업은 항상 나처럼 감동했습니다.
Chris

나는 base 8 :)

1
경우 사람들이 근본적으로 마법의 숫자 2의 거듭 제곱을 알아야 할 무엇에 현대적인 언어로 매크로, 열거 및 비트 필드 .. 함께 setsockopt(...SO_KEEPALIVE..)읽거나 쓰기보다 꽤 많은 쉽게setsockopt(...16...)
JBRWilkinson

15

부울 대수는 이미 언급되었지만 실용적인 예제를 제공하고 싶었습니다.

부울 대수는 복잡한 부울 식 ( 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) {...}

2
이 작업의 문제점은 실제 비즈니스 규칙 인 경우 변경 경향이 있기 때문입니다. 그렇다면 원래 표현식을 변경하여 변경 한 다음 다시 최적화해야합니다. 그렇게하는 동안 관리자는 불평하는 경향이 있습니다.

바로 Karnaugh지도가 도움이 될 수있는 곳입니다. 한 번에 최대 4 개의 부울 플래그에서만 작동하지만 더 필요한 경우 행운을 빕니다!
Job

3
드 모건의 법칙 +1 얼마나 많은 사람들이 그것을 배우고 그것을 적용하는 방법을 알고있는 것에 놀랐습니다.
Fortyrunner

당신은 이것을 잊었다 : (P -> Q) <=> (!P | Q). 극소수의 환경에서 논리적 의미 연산자를 제공하므로 항상 사용합니다. 이는 SQL CHECK 제약 조건과 매우 편리한 기능입니다.
mu는

Karnaugh와 De Morgan의 법칙은 컴퓨터 공학 수업이 아닌 전기 공학 수업에서 일반적으로 사용되는 방법입니다. 후자의 경우 위에서 언급 한 De Morgan의 법칙을 실제로 사용하는 것처럼 응용 프로그램을 찾을 수 있기 때문에 이상합니다.
Spoike

9

내 경험상 수학 공식은 프로젝트에 적용되거나 적용되지 않는 매우 구체적인 계산에 사용됩니다.

무언가를 계산 해야하는 경우 일반적으로 라이브러리 또는 예제 소스 코드에 함수를 사용하여 계산할 수 있습니다. 예를 들어, Excel의 PMT () 함수는 Y 기간 동안 X %의 부채 상환에 필요한 지불을 계산합니다. 실제로 계산 방법을 알고 싶습니까, 아니면 내장 된 것을 호출하는 것으로 충분합니까?

지난 10 년 동안 Ceil (), Min () 및 Max () 이외의 Math 라이브러리의 것을 사용해야 할 필요가 없다고 생각합니다. 컴퓨터가 수학 기반의 문제를 해결하기 위해 고안되었지만 오늘날의 일반적인 사용은 데이터 흐름에 대한 의사 결정입니다.

예를 들어, 방대한 양의 코드가있는 Facebook이 있습니다. 어딘가에 수학이 있을지 모르지만 주로 시스템 라이브러리 인 Crypto API에서 주로 의심됩니다. 그러나 데이터베이스 액세스, 권한 결정, 페이지 작성 및 정보 라우팅은 아마도 많은 수학을 사용하지 않을 것입니다.

그렇습니다. 금융, 물리, 공학 등 많은 수학이 필요한 시장이 있지만,이 산업에서는 주요 분야가 수학 / 경제, 물리, 공학 등일 가능성이 높기 때문에 질문은 '어떻게 쓸 수 있을까요? 언어 Y의 공식 f (x)? '

시간을 잘 사용하는 IMO는 알고리즘 (Big O 표기법 포함)과 디자인 패턴을 조사하는 것입니다.


1
+1은 합리적인 진술처럼 보이기 때문에 알아야 할 특정 공식은 없지만 알고리즘 복잡성 (Big O 표기법)의 개념은 매우 중요합니다.
Michael H.

많은 수학 ... 버그가있는 광고를 결정합니다.

나는 내 경험이 당신만큼 나쁘지는 않지만 필요한 수학의 양이 일반적으로 상당히 낮다는 것에 동의합니다. 저는 그래픽에서 삼각 부분을 주기적으로 사용합니다.
Loren Pechtel

7

더 나은 프로그래머가 될 수있는 공식은 없습니다.

수학 관련 기술을 통해 더 나은 프로그래머가 될 수 있습니다.

  • 과학적 방법 -수학 / 과학 사고 방식 및 문제 해결
  • 추상화 -추상화와 패턴을 인식하는 능력
  • 상속 -새로운 문제를 해결하기 위해 기존 작업 / 방법 재사용
  • 경험 -일련의 문제 및 솔루션 이해

-1, 남자는 유용한 수학 공식에 대해 물었다. 이 답변이 전혀 찬란하다고 믿을 수 없습니다.
Jas


6

"무거운"기능에 대한 빠른 근사치를 얻는 데 매우 유용한 Taylor 시리즈 를 언급하고 싶습니다 . 예를 들어 sin(x)약 0은로 근사 할 수 있습니다 x-(x*x*x/6).

일반적으로 마지막 유효 자릿수로 계산하는 대신 빠르게 근사치를 계산하는 영리한 방법이 있다는 아이디어 (초등 함수의 경우 대부분의 최신 프로세서에는 빠른 고정 배선 구현이 포함되어 있으므로 Taylor를 사용하여 죄를 근사화하는 것은 그리 중요하지 않을 수 있습니다) 속도 게인).


3

부울에 대해 부울 "및"및 "또는"을 변환하는 데 대한 De Morgan의 법칙과 부울 논리 (예 : 이중 부정)에 대한 몇 가지 관련 기본 사항이 있습니다.


2

3의 규칙 (교차 곱셈 유형)

기본 통계 수식의 경우 +1

나는이 간단한 규칙을 기본 코드에 적용하기 어려운 많은 사람들을 보았습니다.


교차 곱셈의 경우 +1 정수 오버플로 문제가 발생하기 쉬운 일부 소프트웨어에서는 교차 곱셈을 사용하여 결과가 오버플로되지 않는지 확인합니다.
rwong

2
별거 아니야 이것은 CS를 배우고 자하는 고등학교 졸업생의 머리에 뿌리 내려야합니다.
Job

@Job : 이론 상으로는 이것이 사실입니다!
Pagotti


2

많은 기하학 문제에 매우 중요한 코사인 법칙

대체 텍스트

특히 각도 결정.


그 방정식에서 감마 란 무엇입니까?
매트 엘렌

1
@ 매트 엘렌 (Matt Ellen) : C면을 가로 지르는 측면의 각도 (IOW, A와 B 사이의 각도)
Lie Ryan

2
그리고 직각 삼각형에 대한 특별한 경우 :a^2 + b^2 = c^2
자기주의 사항-이름을 생각하십시오.

2

프로그래밍은 매우 광범위한 분야입니다. 수학 공식은 어떤 프로그래밍 영역에 있는지에 따라 다릅니다. 그래픽, 게임 프로그래밍에 관심이 있다면 더 많은 삼각법, 기하학을 알아야합니다. 물리, 렌더링, 쉐이더 등의 영역으로 게임 프로그래밍을 세분화 할 수 있습니다. 물리 시뮬레이션 전문가라면 물리와 관련된 것을 알아야합니다.
보안을 유지하고 있다면 수 이론 전문가 여야합니다.
일반적으로, 당신은 이것들과 당신의 관심사 중 어느 것이 든 조합 할 수 있습니다. 학습은 결코 아프지 않습니다.


2

증명 방법

가장 주목할만한 것은 상대 주파수와 함께 사용한 것입니다.

더 많은 것이 있고, 나는 한곳에서 많은 것을 사용했지만, 이것들은 한 번에 사용한 것을 기억할 수있는 3입니다. 또한 단위 또는 통합 테스트를 작성할 때 의도 를 염두에 두면 무한히 도움이됩니다 .


2

T (n) = aT (n / b) + f (n), a> = 1, b> 1

마스터 정리 는 프로그래밍에 대해 잘 알고 있습니다. 재귀 알고리즘의 복잡성을 찾는 데 도움이되는 반복 관계를 해결할 수 있습니다. 이것은 "분할 및 정복"스타일 알고리즘을 작성할 때 특히 중요합니다. 대략적으로 말하면, 각 "단계"와 분기 요인의 복잡성을 알고 있다면 마스터 정리를 사용하여 복잡성을 얻을 수 있습니다.


1
프로그래밍에 대해 알아야하는 이유는 무엇입니까?
Matt Ellen

@MattEllen : 재귀 알고리즘의 복잡성을 찾는 데 도움이되는 반복 관계를 해결할 수 있습니다. 이것은 "분할 및 정복"스타일 알고리즘을 작성할 때 특히 중요합니다. 대략적으로 말하면, 각 "단계"와 분기 요인의 복잡성을 알고 있다면 마스터 정리를 사용하여 복잡성을 얻을 수 있습니다.
Tikhon Jelvis

1
  • 대수학
  • 삼각법
  • 벡터 (행렬 연산)
  • 계산법
  • [다양한 보간 및 그 파생어]
  • [표면, NURBS]

(벽지에있는 것들은 "적용된"종류에 더 가깝습니다)

현재의 분야에 따라 크게 다르기 때문에 일반적인 방향을 제시하기는 어렵습니다. 그러나 위의 과정은 많은 공학 학위의 기본 사항을 다룹니다. 이 범주는 종종 겹칩니다 (삼각법 + 행렬 연산, 미적분 + 행렬 연산 등).

나는 항상 수학 수첩을 가지고 있습니다. 하나는 종종 어떤 것을 확신하지 못하며, 체계적으로 제시하는 데 도움이됩니다.


1

부울 대수를 아는 것이 많은 도움이됩니다. 그것은 당신이 같은 코드를 작성하지 못하게합니다

if (x < 10)
    return true;
else
    return false;

부울 대수가 사용자가 글을 쓰지 못하게하는 방법을 이해하고 있는지 잘 모르겠습니다. 사용자가 무엇을 작성해야하는지 제안 할 수 있습니까? (나는 리턴 x <10이라고 가정하지만 오해 할 수도있다.)
Chris

1
맞습니다. x <10을 반환해야합니다. 이런 식으로 생각하십시오. (x <10)을 평가하면 부울 결과가 반환됩니다. 그런 다음 if 문은 [x가 실제로 10보다 작은 경우]로 분류됩니다 if (true) return true; 또는 [x가 10보다 크거나 같은 경우] if (false) ... else는 false를 반환합니다.
Eric Olsson

2
(x <10)은 두 가지 비즈니스 사례를 분리 할 수 ​​있습니다. 당신이 최소한의 변경 유지할 수로 자세한 양식으로, 당신은, 유지 관리 모드에 아주 좋은 단지 반환 값보다 더 많은 작업을 수행 할 수 있습니다

1

최적화 문제의 경우 로그 가능성을 이해하는 것이 좋습니다. 예를 들어, 제곱합을 최소화하려는 경우 가능성의 로그를 최대화하는 것과 같습니다 (대략 말하기).

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입니다.

많은 사람들이 소프트웨어 성능 문제를 찾고 잘못된 것을 찾는 것을 피하기 위해 많은 수의 샘플이 필요하다고 생각합니다. 이 분포는 적은 수의 샘플이 비용에 대해 많은 것을 보여줄 수 있음을 보여줍니다.


0

이것은 약간 간단하지만 G=(V,E)명심해야 할 좋은 것입니다. 다시 말해, 그래프는 꼭짓점과 가장자리의 집합입니다. 그래프는 많은 것을 나타내는 데 매우 유용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.