You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于秘书问题半随机分布变体的最优求解策略咨询

关于秘书问题半随机分布变体的最优求解策略咨询

Hey there! Great question—love that you're digging into variations of the classic secretary problem, it's such a fun framework to tweak and test. Let's break this down step by step.

First, let's recap the classic problem quickly: the n/e strategy works because candidates are completely randomly ordered—no patterns, no correlations between consecutive candidates. Your modified model throws that out the window by adding sequential structure, so we can definitely do better than either the classic strategy or random guessing.

Let's unpack your semi-random sequence first

You've already written Python code to generate this semi-random candidate order (I added the missing import random reference for completeness):

import random
import time

def sample(lst, k):
    # Seed the random number generator with the current time
    random.seed(time.time())
    # Generate k random indices
    indices = random.sample(range(len(lst)), k)
    # Return the elements at those indices
    return [lst[i] for i in indices]

i = sample(range(1, 101), 1)[0]
j = [i]
for x in range(99):
    if (i + 1) in j:
        i = sample(list(set(range(1, 101)) - set(j)), 1)[0]
    else:
        if random.random() > 0.5 or i == 100:
            i = sample(list(set(range(1, 101)) - set(j)), 1)[0]
        else:
            i = i + 1
    j.append(i)

This creates a mix of short random jumps and continuous increasing runs (like 97→98→99). That structure is gold—we can use it to make smarter decisions than the classic blind "observe then pick" approach.

Key adjustments to the optimal strategy

Here's how we can leverage the semi-random structure:

  • Don't stop mid-increasing run
    If you're in a sequence like x → x+1 → x+2, you know for a fact that the next number (if the run continues) will be x+3—which is larger than all previous numbers in the run. So you should never pick a candidate mid-run; wait until the run breaks (we jump to a random number) to evaluate the run's final value.

  • Use dynamic benchmarks instead of a fixed observation period
    The classic n/e observation period is for establishing a "baseline" of what "good" looks like. In your model, we can make this baseline smarter:

    • Track the global maximum you've seen so far
    • Also track the length and peak values of increasing runs you've observed
      For example: if you see a run that goes from 75→76→77→78, you learn that long runs tend to produce high local maxima. Later, when you hit a run that ends at 85 (which beats your global max), you can pick it immediately instead of waiting.
  • Leverage unused number context
    Since all candidates are unique 1-100 numbers, you can track which numbers haven't been seen yet. For example: if you've already seen 98, you know 99 and 100 are still out there. If you start a run at 99, you should wait for 100 (since there's a 50% chance it will come next) instead of picking 99 early.

Testing this out

You already have a great generator for the semi-random sequences—next step is to code up different strategies and compare their success rates:

  • Test the classic n/e strategy to get a baseline success rate here
  • Test a "wait for run ends, pick if it beats all prior maxima" strategy
  • Test a hybrid approach: observe the first 15-20% of candidates to learn run patterns, then apply the run-based rules

My bet is that these structured strategies will outperform both the classic approach and random guessing by a solid margin—this modification doesn't break the problem, it just gives us more information to work with!

备注:内容来源于stack exchange,提问作者SiuMai2k22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:08:08