ランダム化Quickselect

🔥 Vibe プロンプト

「1000万個の数値の中央値をQuickselectで検索。期待時間と最悪時間を表示。」

import random

def quickselect(arr, k):
    if len(arr) == 1:
        return arr[0]
    pivot = random.choice(arr)
    left = [x for x in arr if x < pivot]
    mid = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    if k < len(left):
        return quickselect(left, k)
    elif k < len(left) + len(mid):
        return mid[0]
    else:
        return quickselect(right, k - len(left) - len(mid))

import time
data = [random.randint(0, 1000000) for _ in range(100000)]
start = time.time()
med = quickselect(data, len(data)//2)
print(f"中央値: {med}, 時間: {(time.time()-start)*1000:.2f}ms")
print("ランダム化でO(n²)の最悪ケースを回避!")

なぜランダム化?

| 手法 | 平均 | 最悪 | |------|------|------| | 決定論的 | O(n) | O(n²) | | ランダム化 | O(n) | O(n) (確率的) |

応用

  • リアルタイム中央値計算
  • データベース順序統計
  • 負荷分散
  • 外れ値検出

重要なポイント

  • コアコンセプトをしっかり理解する
  • ハンズオンコード例で実践する
  • 実世界の問題に応用する
  • 演習で知識を強化する

さらに学ぶ

  • 公式ドキュメント
  • GitHubのオープンソースプロジェクト
  • コミュニティフォーラムとディスカッション
  • 関連コースとチュートリアル

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!