这个问题在接受采访时给了我。采访已经结束了,但我仍然在考虑问题和它的烦恼:
您的语言包含以下工具:rand()
函数,while
和for
循环,if
语句和readline()
方法(类似于python的readline()
)。给定这些工具,编写一个在文件中返回随机行的算法。您不知道文件的大小,并且只能循环文件的内容一次。
答案 0 :(得分:7)
我不知道所需的答案,但我的解决方案如下:
chosen_line = ""
lines = 0
while (current_line = readline()):
if (rand(0, lines) == 0):
chosen_line = current_line
lines++
return chosen_line
编辑:一个很好的解释原因是this comment。
答案 1 :(得分:0)
一种保证均匀分布的方法:
(1)逐行读取文件到一个数组(或类似的,例如python list
)
(2)使用rand()
选择数组中0和最大索引之间的数字。
另一个,不保证统一分配:
阅读每一行。在每次读取时,也调用rand()。如果超过阈值,则返回该行。
答案 2 :(得分:-1)
虽然类似于Marcin的第三个选项,但Luc的实现总是返回第一行,同时解析整个文件。
应该是这样的:
chosen_line = ""
treshold = 90
max = 100
while chosen_line == "":
current_line = readline()
if (rand(0, max) > treshold):
chosen_line = current_line
print chosen_line
如果没有选择任何行,你也可以返回current_line并读取整个文件。