Windows XP가 사용자 사진을 고를 때 쓴 알고리즘은?

What algorithm did Windows XP use to choose your initial user picture?

Windows XP는 사용자 계정 사진을 Default Pictures 폴더에서 무작위로 선택했다. Raymond Chen에 따르면, 이는 RtlRandomEx 난수 생성기와 GetTickCount() 시드를 사용한 단일 패스 알고리즘이었다. 파일 시스템 호출을 줄이고 디렉터리 변경에도 안전한 이 방식은 저수지 샘플링(k=1)의 특수 사례다. 또한 100장 이후에는 샘플링을 중단해 병리적 동작을 방지한다.

이 알고리즘의 작동 방식은 n개 항목의 컬렉션에서 마지막 항목이 무작위로 선택될 확률이 1/n이라는 점을 관찰하는 것이다.
  1. mawadev

    저는 이런 블로그 글을 읽을 때에야 비로소 알게 되는 경우가 있습니다. 기술적으로는 같은 방식으로 해결할 수 있겠지만, 요즘은 책상 위에 할 일이 너무 많아서 문제와 그 함의에 대해 전혀 생각하지 않게 되고, 그런 인식/규율은 잡음 속에 묻히거나 시간이 지나면서 사라집니다.

    누군가 이걸 아주 간단하다고 생각해서(항상 그렇듯이) 2분만 주면, 나는 디렉터리에서 특정 패턴의 파일 개수를 세고 무작위 인덱스를 고르는 식으로 했을 겁니다. 아주 순진하고 빠르고 대충 하는 프로그래밍이죠. 샘플링도 전혀 없이, 그냥 왜 그렇게 오래 걸리는지 듣고 싶어 하지 않는 사람들과 논쟁하는 걸 피하려고요.

    이건 제가 인생에서 C#, Java, JS, Python을 많이 하면서 문자열과 객체 맵을 채우던 때를 떠올리게 합니다. 그러다 zig를 시작하고 나서 문자열과 자료 구조 할당이 얼마나 비싸고 복잡할 수 있는지 깨달았죠. 예산/시간 제약 때문에 최대한 빨리 일을 처리하려고 할 때 우리가 얼마나 많은 메모리와 연산을 낭비하는지 정말 놀라웠습니다.

  2. lyorig

    와, Windows 내부 구조에 관한 Raymond Chen의 글은 하나하나가 작은 크리스마스 같아요. 그런데 그가 이런 지식을 공개하기 전에 누군가에게 허락을 구해야 하는 건지 궁금하네요.

  3. EMIRELADERO

    관심 있는 분들을 위해, Chen이 언급한 실제 코드는 여기 있습니다: https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b...

  4. impoppy

    >Raymond는 30년 넘게 Windows의 진화에 관여해 왔습니다. 그는 때때로 Windows Dev Docs Twitter 계정에 나타나 별로 유용한 정보를 전달하지 않는 이야기를 합니다.

  5. scrumper

    이건 컴퓨터 프로그래밍을 처음 시작할 때 발동해야 하는 인지적 전환의 재미있는 예입니다. 인간이 여러 물건 더미에서 하나를 무작위로 고르는 건 매우 쉽습니다. 손을 뻗어 집으면 되니까요. 아마 먼저 탁자 위에서 휘저어 순서를 섞을 수도 있겠죠. 컴퓨터에게는 그런 직접적인 유추가 없습니다. 컴퓨터는 그냥 할 수 없어요. 그리고 인간의 과정은 컴퓨터가 따르는 것과 조금도 비슷하지 않습니다. 우리는 집합을 세고 반복할 필요도 없고, 항목 수를 세고 난수를 생성해 n번째 항목을 고를 필요도 없고, null 항목을 고를 위험도 없습니다.

  6. cgio

    사람들이 수십억 초의 시간을 피하기 위해 뇌 세포 하나를 더 쓰던 시절.

  7. rietta

    2004년 블로그 글을 가리키면서 '얼마 전에'라고 담담하게 말하는 게 정말 좋네요. Raymond는 오래도록 이 일을 해왔군요 :-)

  8. ape4

    파일 시스템에 폴더에 파일이 몇 개 있는지 알려주는 호출이 없다는 건 좀 이상하네요.

이 날의 다른 글

2026-09-10