【算法】非重复随机序列生成

本文介绍了如何生成一个包含N个整数的不重复随机序列。通过从初始序列中随机选择并删除元素,保证了序列的随机性和唯一性。算法的时间复杂度和空间复杂度均为O(N)。附带了Python实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:给定整数N,求一整型序列,该序列包含N个整数(0到N-1),呈随机分布状态,且不重复。

解决方法
很简单的一个问题,每次从初始序列S中随机选取一个元素加到结果序列R中,同时将该元素从序列S中删除,重复以上过程,直到序列S为空,此时序列R即为所求。
此算法需要生成N个随机数,因此时间复杂度为O(N),因序列S和序列R总计有N个元素,因此空间复杂度也为O(N)
具体步骤:首先初始一个0~N-1的由N个元素构成的序列S,对于第i(i >= 0 && i < N)个元素,每次随机生成一个[i, n)范围内的随机数j,交换初始序列S中的第i和第j个元素

时间复杂度:O(N)

空间复杂度:O(N)

Python代码

# !/usr/bin/env python 
# -*- coding:utf-8 -*- 
# Author: NeoMT<matengneo@gmail.com>
#
# 非重复随机序列生成算法
# 给定整数N,求一整型序列,该序列包含N个整数(0到N-1),呈随机分布状态,且不重复。

import random

def
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值