相关疑难解决方法(0)

从Linq到Sql的随机行

当我有条件时,使用Linq to SQL检索随机行的最佳(和最快)方法是什么,例如某些字段必须为true?

.net c# linq-to-sql

110
推荐指数
5
解决办法
6万
查看次数

用于打印混洗列表的算法,就地并使用O(1)存储器

读完这个问题后,我开始怀疑:是否有可能有一个不改变或复制原始列表的改组算法?

说清楚:

想象一下,您将获得一个对象列表.列表大小可以是任意的,但假设它非常大(例如,10,000,000个项目).您需要以随机顺序打印列表中的项目,并且需要尽快完成.但是,你不应该:

  • 复制原始列表,因为它非常大并且复制会浪费大量内存(可能达到可用RAM的限制);
  • 修改原始列表,因为它以某种方式排序,之后的其他部分依赖于它的排序.
  • 创建一个索引列表,因为再次,列表非常大,复制需要花费太多时间和内存.(澄清:这意味着任何其他列表,其具有与原始列表相同数量的元素).

这可能吗?

补充:更多澄清.

  1. 我希望列表以真正的随机方式进行混洗,所有排列都同样可能(当然,假设我们有一个合适的Rand()函数开始).
  2. 建议我制作一个指针列表,或一个索引列表,或任何其他列表与原始列表具有相同数量的元素,由原始问题明确地认为是低效的.如果需要,您可以创建其他列表,但它们应该比原始列表小很多.
  3. 原始列表就像一个数组,您可以通过其在O(1)中的索引从中检索任何项目.(所以没有双重链接列表的东西,你必须遍历列表才能找到你想要的项目.)

添加2:好的,让我们这样说吧:你有一个装有数据项的1TB硬盘,每个512字节大(一个扇区).您希望将所有这些数据复制到另一个1TB HDD,同时洗牌所有项目.您希望尽快完成此操作(单次传递数据等).您有512MB的RAM可用,并且不依赖于交换.(这是一个理论场景,我在实践中没有这样的东西.我只是想找到完美的algorithm.item.)

theory algorithm shuffle

11
推荐指数
2
解决办法
1179
查看次数

标签 统计

.net ×1

algorithm ×1

c# ×1

linq-to-sql ×1

shuffle ×1

theory ×1