Python中如何实现一个算法
需求: 在 1~10000000 范围内, 取 500000 个随机数,保证不重复, 每次取出数据缩小范围优化速度(不可使用 random.sample )
有没有比我写的还简单的....
def demo():
dic = {i:i for i in range(1,10000001)}
ls = []
for i in dic.values():
ls.append(dic.values())
if len(ls) == 500000:
break
print(len(ls))
import timeit
t = timeit.Timer(‘demo()’, ‘from main import demo’)
print(t.timeit(1))
Python中如何实现一个算法
突然想起来 字典的无序 好像不符合 随机数这个点… 这个算法是错的= =!!!求大佬
要回答这个问题,得先知道你具体想实现什么算法。Python实现算法通常就是写函数或类。我举个最常见的例子,比如实现一个快速排序算法,可以直接用几行代码搞定。
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# 示例
my_list = [3, 6, 8, 10, 1, 2, 1]
sorted_list = quick_sort(my_list)
print(sorted_list) # 输出: [1, 1, 2, 3, 6, 8, 10]
核心就是理解算法逻辑,然后用Python的数据结构和控制流把它表达出来。如果是更复杂的算法,可能还需要用到递归、动态规划这些概念。总之,先理清思路再动手写就对了。
总结:先明确算法步骤,再转化为Python代码。
i for i in range(1,10000001) 是遍历,不是随机给, 你是不是想 random.randint
看不懂,你这 for i in dic.values() , i 又没有使用,什么逻辑?
接上面,你这数组不会炸吗?
https://www.cnblogs.com/forget406/p/5294143.html
好像这个是伪随机数产生的算法,和你这个有点不一样
Python36 以上的 dict 已经有了,这样行不通吧
有序*
dic=[i for i in range(1,10000001)]
random.shuffle(dic)
ls=dic[:500000]
import random
arr = set()
while len(arr) < 500000:
arr.add(random.randint(1, 10000001))
随机不是那么容易实现的,字典也只是看似无序
这代码好像 append 也不对吧,应该是 append(i) 吧,而不是 append(dic.values())
是不可使用 random.sample 还是不可使用 random,如果是前者的话研究研究 random 别的方法,后者的话……自己写个伪随机?
楼主的基础知识也太差了些。字典的无序不是随机,那个键值做 hash 运算后是固定规律可寻的。
不知道楼主的随机数用途是什么,如果只是玩玩那么用 C 的 random 函数( python 的随机函数本质上是和 C 一样的)产生的伪随机数凑合用是可以的。但是大样本下这是不能做正式生产用途的,是可以找到规律的。
真随机数靠程序是永远无法实现的,真正的业务系统都是用有认证的硬件随机数发生器的,那是用电路热噪声,布朗运动,量子效应,放射性衰变等做随机种子。
如果不想投资硬件,只能是找一台磁盘比较忙的 LINUX 服务器,从 /dev/random 读字节流,这个是真随机数,只是性能不高。
Mersenne Twister, the mostly widly used pseudo-random-number-generator
随机算法,你先看看这个基础的 wiki,你再想想你这个想法的实际场景,以及新的算法。反正研究是这么来的。
那个啥, 我想说, 什么叫随机数, 计算机里没有真正的随机数, 都是伪随机数, 那么好了:<br>for i in range(500000): yield hash(i * 0.1) % 10000000<br>
随机数算法嘛, 还是用梅森旋转算法的好. 但是代价不低.
Python 3.6 的时候, cpython 的 dict 效仿了 pypy 的实现方案, 他会跟踪你 dict 添加元素的顺序.


