Windows XPのユーザー画像選択アルゴリズムが意外と賢かった話

[PR]記事内のアフィリエイトリンクから収入を得る場合があります
  • URLをコピーしました!

Windowsxp wallpaper

Windows XPを初めてセットアップしたとき、ユーザーアカウントには自動でアイコン画像が割り当てられます。

実はこの画像、単なるランダム選択ではなく、効率性と安全性を考えた専用アルゴリズムで選ばれていたことが、MicrosoftのベテランエンジニアRaymond Chen氏の解説からわかりました。

目次

使われていたランダム生成の仕組み

Windows XPがアイコン画像を探すために参照しているのは、%ALLUSERSPROFILE%\Application Data\Microsoft\User Account Pictures\Default Picturesで指定される標準画像フォルダです。乱数生成にはRtlRandomExが、初期シードにはGetTickCount()が使われ、起動時間に応じて毎回異なる乱数が生成される仕組みでした。

画像を選択するアルゴリズムとしてはファイル一覧を2回読み込むような、素直ではあるものの非効率な方法は採用していません。代わりに使われていたのが「リザーバサンプリング(k=1)」と呼ばれる1回の捜査で完結する手法です。

selectRandomFromIterator(iterator)
{
    var count = 0;
    var winner = null;

    while (iterator.moveNext()) {
        ++count;
        if (uniform_random(min: 1, max: count) == count) {
            winner = iterator.current();
        }
    }

    return winner;
}

これは、フォルダ内の画像を1つずつ読みながら、「今まで見た数に応じて確率的に勝者を入れ替えていく」という方式で、最終的に1枚が選ばれます。

この方法には次のメリットがあります。

  • ファイルシステムへのアクセス回数が少なくて済む
    → XP時代のPCでは特に重要な最適化
  • 処理中にフォルダ内のファイル数が変わっても破綻しない
    → 2回読み込み方式だと途中で数が変わると不整合が起きる

もし誰かがフォルダに大量の画像を入れていた場合、処理が終わらなくなる可能性があります。そのためXPは、100枚を上限として走査を打ち切る安全策を入れていました。当時のWindowsらしい、堅実で実用的な設計です。

まとめ:XPらしい地味だけど賢い最適化

Windows XPの初期ユーザー画像選択は、単なるランダムではなく、効率性・安全性・実用性を兼ね備えたアルゴリズムで実装されていました。普段は気にしないような細部にも工夫が詰まっているのがXPの興味深いところかもしれません。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次