问题列表 - 第7266页

如何在不将文件存储在内存中的情况下从文件中读取N个随机行?

我熟悉从文件读取单个随机行而不将整个文件读入内存的算法.我想知道这种技术是否可以扩展到N个随机线?

用例是一个密码生成器,它连接从字典文件中拉出的N个随机字,每行一个字(如/usr/share/dict/words).你可能想出来angela.ham.lewis.pathos.现在它将整个字典文件读入一个数组,并从该数组中选择N个随机元素.我想消除该文件的数组或任何其他内存存储,并只读取该文件一次.

(不,这不是一个实际的优化练习.我对算法感兴趣.)

更新:谢谢大家的答案.

答案分为三类:完整读取算法的修改,随机搜索或索引线并随机搜索它们.

随机搜索要快得多,并且相对于文件大小是恒定的,但是基于文件大小而不是字数来分发.它还允许重复(可以避免,但它使算法O(inf)).这是我使用该算法重新实现我的密码生成器.我意识到,通过从搜索点向前读取,而不是向后读取,如果搜索落在最后一行,它会有一个一个一个错误.校正留作编辑的练习.

#!/usr/bin/perl -lw

my $Words       = "/usr/share/dict/words";
my $Max_Length  = 8;
my $Num_Words   = 4;

my $size = -s $Words;

my @words;
open my $fh, "<", $Words or die $!;

for(1..$Num_Words) {
    seek $fh, int rand $size, 0 or die $!;
    <$fh>;
    my $word = <$fh>;
    chomp $word;
    redo if length $word > $Max_Length;
    push @words, $word;
}
print join ".", @words;
Run Code Online (Sandbox Code Playgroud)

然后就是Guffa的答案,这正是我所寻找的; 原始算法的扩展.更慢,它必须读取整个文件,但是按字分发,允许过滤而不改变算法的效率,并且(我认为)没有重复.

#!/usr/bin/perl -lw

my $Words …
Run Code Online (Sandbox Code Playgroud)

random algorithm

9
推荐指数
1
解决办法
3887
查看次数

为什么Java不具有众所周知的系统属性名称的常量?

所述java.lang.System中类定义了许多公知的特性.

例如,您可以通过查找"java.io.tmpdir"属性来获取JVM的临时目录:

... = System.getProperty("java.io.tmpdir");
Run Code Online (Sandbox Code Playgroud)

我不明白的是为什么这些属性没有被定义为常量(例如在java.lang.System类中).与使用文字字符串相比,这将更不容易出错.换句话说,我希望能够做到这一点:

... = System.getProperty(System.JAVA_IO_TMPDIR);
Run Code Online (Sandbox Code Playgroud)

任何想法为什么没有这样做?它甚至可以在未来的Java版本中添加,而不会破坏向后兼容性.还是我错过了一些明显的东西?

java api properties constants

15
推荐指数
2
解决办法
3118
查看次数

我可以将自定义属性存储在HTML DOM中,如数据库记录吗?

使用jQuery为浏览器FF3和IE6/7开发时,在HTML标记上设置自定义属性时是否存在任何兼容性问题?

首先,我知道jQuery的data()功能,它基本上做了我想要的,但数据不能在一个clone()函数中存活.这是使用jQuery UI draggable/droppable插件时的一个问题,因为它在拖放过程中克隆了DOM元素.出于这个问题的目的,我需要一个替代方案data().

我想在拖放操作之间保留数据.我希望能够将数据注入到拖放操作期间移动的DOM元素中.为此,我可以构建HTML子元素来模拟数据库记录.快速实验表明Firefox使用我想存储数据字段的任何属性名称没有问题.但是,HTML 4规范说某些标签只能包含某些属性名称.使用非标准属性填充DOM会导致与我提到的浏览器不兼容吗?

html browser jquery dom jquery-ui

10
推荐指数
1
解决办法
1万
查看次数

Sed:改变替换组的情况

如何使用sed Unix命令将匹配组的大小写从小写更改为大写?

谢谢马丁

regex unix sed

9
推荐指数
2
解决办法
5857
查看次数

在Windows和Mono中存储C#服务设置

我正在编写一个C#服务,我希望能够在Windows和Mono上使用它.我刚刚开始尝试使用Mono,我正在尝试确定存储设置的最佳方法,以控制适用于Windows和Mono的服务.

  1. 安装服务的设置文件

    • 优点:每个平台的代码相同,易于编辑
    • 缺点:权限,Windows可能不喜欢写入文件
  2. 平台存储中的设置文件(%APPDATA,/ etc,...)

    • 优点:具有权限,更容易找到编辑
    • 缺点:处理每个平台需要更多编码
  3. 小数据库(可能是SQLite?)

    • 优点:更容易编写代码来存储和检索设置
    • 缺点:手动编辑不容易,存储位置的问题也一样

您认为哪个最好,或者您有更好的建议?
我也可能会编写命令行客户端以便更改设置,这会改变设置的存储方式吗?

c# mono settings windows-services

9
推荐指数
1
解决办法
1852
查看次数

如何在Sqlite中实现重音/变音符号不敏感搜索?

有没有办法在sqlite中进行重音/变音符号不敏感搜索?

谷歌搜索,我发现了这一点,但我真的不知道如何在C#中创建我的"校对功能".我正在尝试为Sqlite创建pt-br排序规则...

c# database sqlite search collation

2
推荐指数
1
解决办法
5159
查看次数

在C中替换字符串的功能是什么?

给定一个(char*)字符串,我想找到所有出现的子字符串并用替换字符串替换它.我没有看到任何在<string.h>中实现此功能的简单函数

c string

83
推荐指数
7
解决办法
24万
查看次数

在Javascript中,你能扩展DOM吗?

在Javascript中,您可以使用其原型对象扩展现有类:

String.prototype.getFirstLetter = function() {
    return this[0];
};
Run Code Online (Sandbox Code Playgroud)

是否可以使用此方法来扩展DOM元素?

javascript dom

24
推荐指数
3
解决办法
2万
查看次数

GIT如何决定blob中的内容?

我试图了解Git如何更好地工作.

给定一些任意文件和一些任意数量的提交,git如何决定如何将这些文件拆分成blob,然后使用SHA-1哈希进行唯一标识?

我刚刚将大约10个perl/C/java代码和文本提交到新的git repo中,并且不知何故git将文件分成了几个小段,它是如何决定这些段应该如何划分的呢?

git

1
推荐指数
1
解决办法
760
查看次数

将参数传递给类构造函数

如何使用下面定义的Object()函数将任意数量的参数传递给类构造函数?

<?php

/*
./index.php
*/

function Object($object)
{
    static $instance = array();

    if (is_file('./' . $object . '.php') === true)
    {
        $class = basename($object);

        if (array_key_exists($class, $instance) === false)
        {
            if (class_exists($class, false) === false)
            {
                require('./' . $object . '.php');
            }

            /*
            How can I pass custom arguments, using the
            func_get_args() function to the class constructor?

            $instance[$class] = new $class(func_get_arg(1), func_get_arg(2), ...);
            */

            $instance[$class] = new $class();
        }

        return $instance[$class];
    }

    return false;
}

/*
How do I make …
Run Code Online (Sandbox Code Playgroud)

php class object

8
推荐指数
1
解决办法
1万
查看次数