问题描述:给定整数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