programing150 백 트래킹 (back tracking) - 일종의 brute-force 알고리즘과 비슷함 - 대표적으로 8-queen 문제 - 모든 해를 찾도록 반복문으로 모든 경우를 살피도록 함 - 대신 도중에 절대로 해가 될 수 없는 경우를 미리 제거 2017. 3. 10. 다이나믹 프로그래밍 - 다음 두가지 조건을 만족하면 DP로 접근 1) 겹치는 부분 문제( overlapping subproblem ) 2) 최적 부분 구조( optimal substructure ) - 같은 문제를 구할 때마다 정답은 같이 때문에 각 문제를 한 번만 풀어야 함 - 따라서 정답을 한 번 구하게 되면 배열에 저장하여 다시 쓰도록 함 -> 메모이제이션 cf. 템플릿 메타 프로그래밍과 비슷함 (템플릿 메타 프로그래밍은 컴파일 타이밍에 미리 만들어져서 알아서 쓰게 됨 2017. 3. 10. 비동기 입출력 비동기 입출력은 Win32 파일 입출력 함수의 큰 자랑거리이나 사실 실용성은 거의 빵점에 가깝다.일단 요즘 하드 디스크 성능이 너무 좋아져서 50M 정도를 출력하는 것은 불과 2초 정도면 충분(정말 빠른 하드 디스크는 1초도 채 안 걸린다.)하기 때문에 굳이 동기화 객체까지 써가며 복잡한 비동기 입출력을 할 필요가 없다. 만약 600M 정도의 큰 데이터를 입출력 한다면 동기 출력과 비동기 출력의 차이가 발생할 수도 있겠지만 이 경우도 현실성이 없다. 왜냐하면 입출력 자체는 비동기적으로 할 수 있지만 600M 버퍼는 한꺼번에 제공해야 하는데 600M 메모리를 부담 없이 내 줄 수 있는 PC는 드물기 때문이다. 그러나 비동기 입출력이 정말 제대로 사용되는 경우도 있는데 디스크 상의 파일이 아닌 직렬, 병렬 .. 2017. 3. 10. 쓰레드 사용시에... 1.두 쓰레드가 같은 공간을 접근할 때 경쟁 조건이 생기는데 그래서 보통은 동기화를 사용함 그 중 유저모드 동기화가 빠르다고 해서 주로 사용하긴 했는데 atomic으로 사용해보니 신세계다. 대충 2배 정도 빠른 듯하다. while() 문을 이용하므로 계속 cpu를 점유 하던지 sleep()을 넣어야 한다. 2.두 쓰레드가 매니저(패턴)에 접근시에 이미 만들어져 있으면 큰 문제가 없지만 만들어져 있지 않은 상태로 접근하게 되면 경쟁 조건이 발생하게 되고 나도 모르는 사이에 싱글턴 객체가 두 개가 만들어짐 그래서 종료하다 보면 나도 모르는 메모리 릭이 생긴다. => 동기화, 미리 instance만들기, 더블락 (null 체크 -> 동기화 -> null 체크) 3.static 변수는 함부로 함수로 사용하면 안.. 2017. 3. 7. 이전 1 ··· 9 10 11 12 13 14 15 ··· 38 다음