随机策略线性时间内寻找元素Python

当前编程题:随机策略线性时间内寻找元素—随机策略线性时间内寻找元素(递归与分治)
1.
【问题描述】每次都是随机选出一个元素为划分基准,在平均情况下线性时间内寻找第i小元素。

【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。再输入要寻找的元素是数组从小到大顺序中第几个位置。

【输出形式】数组从小到大顺序中要寻找的那个位置的元素。

【样例输入】

2 9 8 0 7 10 1 12 3 14 5 13 6 11 4

3

【样例输出】

2

【样例说明】

输入:15个整数,以空格分隔。要寻找第3小元素。

输出:2,表示第3小元素为2。

【评分标准】根据输入得到准确的输出。

思想:模仿快速排序算法,其基本思想是对输入数组进行递归划分,与快速排序算法不同的是,它只对划分出的子数组之一进行递归处理。
思想

import numpy as np
import random
def Partition(L, p, r):#以最后一个元素L[r]为基准对数组进行划分
    x = L[r]
    i = p-1
    for j in range(p, r):
        if L[j] <= x:
            i = i+1
            L[i], L[j] = L[j], L[i]
    L[i+1], L[r] = L[r], L[i+1]
    return i+1 

def RandomizedPartition(L, p, r):#随机选取基准元素
    i = random.randint(p, r)#生成p到r之间的随机数
    L[i], L[r] = L[r], L[i]#将选出的基准元素换到最后一个
    j = Partition(L, p, r)
    return j

def RandomizedSelect(L, p, r, i):
    if p == r:
        return L[p]
    q = RandomizedPartition(L, p, r)
    k = q-p+1
    if i == k:
        return L[q]
    elif i < k:
        a = RandomizedSelect(L, p, q-1, i)
        return a
    else:
        b = RandomizedSelect(L, q+1, r, i-k)
        return b


def main():
    L = np.array(list(map(int, input().split())))
    n = len(L)
    k = input()
    k = int(k)
    c = RandomizedSelect(L, 0, n-1, k)
    print(c)

if __name__ == '__main__':
    main() 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值