File 流中的字符
这个问题是在一次采访中提出的 假设您的计算机正在从流中逐个读取字符,您在结束之前不知道流的长度。请注意,您只有一个字符的存储空间,因此无法将您读取的字符保存到类似于strong的文件中。读完后,应该以相同的概率从流中返回一个字符 如何解决这个问题??有什么想法吗File 流中的字符,file,stream,File,Stream,这个问题是在一次采访中提出的 假设您的计算机正在从流中逐个读取字符,您在结束之前不知道流的长度。请注意,您只有一个字符的存储空间,因此无法将您读取的字符保存到类似于strong的文件中。读完后,应该以相同的概率从流中返回一个字符 如何解决这个问题??有什么想法吗 有什么办法可以解决这个问题吗?这是你知道或不知道的技巧之一: 取第一个字符,概率1/2取下一个,否则保留第一个,概率1/3取下一个,否则保留,以此类推 它之所以有效,是因为每次选择概率为1/n的第n个字符,或者保留概率为1/n-1的前一
有什么办法可以解决这个问题吗?这是你知道或不知道的技巧之一: 取第一个字符,概率1/2取下一个,否则保留第一个,概率1/3取下一个,否则保留,以此类推
它之所以有效,是因为每次选择概率为1/n的第n个字符,或者保留概率为1/n-1的前一个字符,概率为1-n/n,而1-n字符则被取消。只是为了挑剔:n存储在哪里-@Andre Holzner您甚至可以更加挑剔,询问如何生成一个随机数而不占用任何存储空间,或者如何访问流而不需要存储空间来引用或指向流对象的指针。@Andre Holzner更严肃地说,除了对流和随机数生成器的char和函数调用的内存之外,该方法还需要存储表示获取或保留概率的单个double。它可以更新为p=1/1/p+1。