学习课程:算法与数据结构
章节名称:第16周 随机算法,外存算法和更多
讲师:Liuyubobobo
课程内容:
随机算法是一个很广的概念
计算机生成的都是伪随机数
如何生成更”随机“的随机数
随机数生成算法PseudoRandom Number Generator
最基础的一次采样
陷阱:模偏差
加权采样:彩票机制
Leetcode 528. 按权重随机选择
import random class Solution: def __init__(self, w: List[int]): n=len(w) self.lst=[0]*n self.lst[0]=w[0] for i in range(1,n): self.lst[i]=self.lst[i-1]+w[i] def pickIndex(self) -> int: idx=random.randint(1,self.lst[-1]) return bisect_left(self.lst, idx)
拒绝采样:计算结束期望次数
leetcode 470. 用 Rand7() 实现 Rand10()
class Solution: def rand10(self): """ :rtype: int """ while True: seed = (rand7() - 1) * 7 + rand7() - 1 if seed <=39: return seed%10+1
Knuth Shuffle 洗牌算法:注意公平性
可以用来解决多次不重复采样问题
蓄水池抽样
解决数据流中多次不重复采样问题
类似于TopK
Leetcode 382 链表随机节点
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next import random class Solution: def __init__(self, head: Optional[ListNode]): self.head=head def getRandom(self) -> int: ans=self.head.val cur=self.head.next cnt=1 while cur: if random.randint(0,cnt)==0: ans=cur.val cur=cur.next cnt+=1 return ans
学习收获:
所有的算法的oj仅仅是学习算法的工具,关键还是要了解每一个算法的原理,很多可以AC的代码不一定就是正确的。
要注意封装的程序不受外部输入的影像,同时也不要让封装的程序影响到外部的输入;尤其是引用类型的数据。
系统设计中的算法问题值得研究,因为他是用计算机思维去解决计算机工程上的问题,他比oj题更有意义。
打卡截图:
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦