
Windows XPの初期プロフィール画像選択アルゴリズム
TL;DR: Windows XPは %ALLUSERSPROFILE%\\Application Data\\Microsoft\\User Account Pictures\\Default Pictures ディレクトリからプロフィール画像をランダムに選択していた。RtlRandomEx を使用し GetTickCount() でシードし、k=1 のリザーバーサンプリングアルゴリズムを採用、最大100枚まで処理した。
Raymond Chen 氏は The Old New Thing ブログで、Windows XP がユーザーアカウント作成時の初期プロフィール画像をどのように選択していたかを解説した。このアルゴリズムは、ユーザーが当時意識することのなかった実装の詳細を明らかにしている。
画像選択の仕組み
Windows XP は %ALLUSERSPROFILE%\\Application Data\\Microsoft\\User Account Pictures\\Default Pictures ディレクトリに保存されているプロフィール画像の中からランダムに1枚を選択していた。乱数生成器として RtlRandomEx を使用し、GetTickCount() の現在値を初期シードとして活用した。
アルゴリズムの実装方式
この機能は1回パスのランダム選択アルゴリズムを採用していた。このアルゴリズムはリザーバーサンプリングの特殊形で、k が 1 の場合に相当する。実装上の安全対策として、処理は100枚のサンプリング後に停止するよう制限されていた。
筆者の見立て
- 1回パスアルゴリズムは素朴な2回パスアルゴリズムよりも効率的であることが示唆されている。ファイルシステムへのアクセスが回数削減によりボトルネックを軽減するためである。
- ディレクトリ内のファイル数が処理中に変化した場合に、複雑な問題を回避することを意図した実装であると解釈されている。
この記事は元記事の事実のみに基づいて自動生成されました。
出典
The Old New Thing 「What algorithm did Windows XP use to choose your initial user picture?」 https://devblogs.microsoft.com/oldnewthing/20260909-00/?p=112683