通过添加和删除项目,可以非常轻松地修改JavaScript中的数组.它有点掩盖了大多数语言数组是固定大小的事实,并且需要复杂的操作来调整大小.似乎JavaScript可以很容易地编写性能不佳的数组代码.这导致了一个问题:
在数组性能方面,我可以从JavaScript实现中获得什么样的性能(就大O时间复杂度而言)?
我假设所有合理的JavaScript实现至少具有以下大O.
JavaScript允许您使用new Array(length)
语法将数组预填充到特定大小.(额外的问题:以这种方式创建一个数组O(1)或O(n))这更像是一个传统的数组,如果用作预先调整大小的数组,可以允许O(1)追加.如果添加了循环缓冲逻辑,则可以实现O(1)前置.如果使用动态扩展数组,则O(log n)将是这两者的平均情况.
对于某些事情,我可以期待比我的假设更好的表现吗?我不希望在任何规范中概述任何内容,但实际上可能是所有主要实现都在后台使用优化的数组.是否有动态扩展阵列或其他一些性能提升算法?
PS
我想知道这个的原因是因为我正在研究一些排序算法,其中大多数似乎假设在描述它们的整体大O时附加和删除是O(1)操作.
我知道前馈神经网络的基础知识,以及如何使用反向传播算法对它们进行训练,但我正在寻找一种算法,而不是我可以用来通过强化学习在线训练ANN.
例如,推车杆摆动问题是我想用ANN解决的问题.在那种情况下,我不知道应该怎样做才能控制钟摆,我只知道我与理想位置有多接近.我需要根据奖励和惩罚来学习ANN.因此,监督学习不是一种选择.
另一种情况是蛇游戏,其中反馈被延迟,并且仅限于目标和反目标,而不是奖励.
我可以为第一种情况考虑一些算法,比如爬山或遗传算法,但我猜它们都会很慢.它们也可能适用于第二种情况,但速度极慢,不利于在线学习.
我的问题很简单:是否有一种简单的算法来训练具有强化学习的人工神经网络?我主要对实时奖励情况感兴趣,但如果基于目标的情境的算法可用,甚至更好.
language-agnostic algorithm machine-learning reinforcement-learning neural-network
我将在Javascript中存储大量字节值(最有可能超过一百万).如果我使用普通数字的正常数组,那将需要8 MB,因为数字存储为IEEE双精度数,但如果我可以将其存储为字节数,则它将只有1 MB.
我想避免因为显而易见的原因而浪费那么多空间.有没有办法将字节存储为字节而不是双精度?浏览器兼容性对我来说不是问题,只要它适用于Chrome.这是在HTML5中,如果这有所不同.
我正在尝试实现一个带回退轮询的WebSocket.如果WebSocket连接成功,则readyState
变为1,但如果失败,readyState
则为3,我应该开始轮询.
我试过这样的事情:
var socket = new WebSocket(url);
socket.onmessage = onmsg;
while (socket.readyState == 0)
{
}
if (socket.readyState != 1)
{
// fall back to polling
setInterval(poll, interval);
}
Run Code Online (Sandbox Code Playgroud)
我期待socket.readyState
异步更新,并允许我立即阅读.然而,当我运行这个时,我的浏览器会冻结(我放弃它大约半分钟才放弃).
我想也许有一个onreadyStateChanged
事件,但我没有在MDN参考中看到一个.
我应该如何实现这个?显然空循环不起作用,并且没有事件发生.
拿这个小LINQPad示例:
void Main()
{
Foo<object> foo = new Foo<string>();
Console.WriteLine(foo.Get());
}
class Foo<out T>
{
public T Get()
{
return default(T);
}
}
Run Code Online (Sandbox Code Playgroud)
它无法使用此错误进行编译:
方差修饰符无效.只能将接口和委托类型参数指定为变量.
我没有看到代码的任何逻辑问题.一切都可以静态验证.为什么不允许这样做?它是否会导致语言不一致,或者由于CLR的限制而被认为实施起来太昂贵了?如果是后者,我作为开发人员应该知道什么是上述限制?
考虑到接口支持它,我希望从逻辑上遵循该类支持.
我运行Windows,当npm修改我的package.json文件时,它使用Unix风格的行结尾(LF)编写它.我希望它使用Windows风格的行结尾(CRLF).
是否有全局配置设置,甚至命令行选项使npm使用正确的EOL字符?
我怎样才能只允许Visual C#文本框中的某些字符?用户应该能够将以下字符输入到文本框中,其他所有内容都应该被阻止:0-9,+, - ,/,*,(,).
我用Google来查找这个问题,但我得到的唯一解决方案是只允许使用字母字符,只允许数字或禁止使用某些字符.我想要的不是禁止某些字符,除了我在代码中添加的字符外,我想默认禁止所有内容.
有没有办法链接到网站的索引页面而不指定索引页面的名称或完整的网站URL?
我有这个:
<a href="index.htm">Home</a>
Run Code Online (Sandbox Code Playgroud)
但是当我点击链接时,我的地址栏显示:
mydomain.com/index.html
Run Code Online (Sandbox Code Playgroud)
我希望它显示:
mydomain.com
Run Code Online (Sandbox Code Playgroud)
如果不将完整的URL(mydomain.com
)放入href
?中,我可以这样做吗?如果是这样,怎么样?
对于未来的观众,我也发现这个问题很有帮助.
我正在尝试在Node.js中将文档插入MongoDB.我已成功读取数据库,并通过命令行界面添加了文档.但是,我无法从JavaScript插入文档.如果我这样做,我会收到一个错误:
错误:如果没有提供的回调,则无法使用writeConcern
这是我的代码:
var mongodb = require("mongodb");
var MongoClient = mongodb.MongoClient;
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
if (!err) {
db.collection("test").insert({ str: "foobar" });
}
});
Run Code Online (Sandbox Code Playgroud)
我不能为我的生活找出为什么我得到这个错误.
我做错了什么,我应该怎么做呢?
我有一个Visual Studio 2012解决方案/Foobar.sln
.它包含一个类库项目和一个单元测试项目.几天前我发现了一个新文件/Foobar.sln.ide/graph/Foobar.sln.ide
.
内容:
<Solution Format="0.0.0.3">
<Version>0001-01-01T00:00:00Z</Version>
</Solution>
Run Code Online (Sandbox Code Playgroud)
我不确定它在创建时我在做什么,因为直到它创建几天后我才注意到它.
今天,比我第一次提出这个问题晚几天,它再次出现在Excel VSTO加载项目中.我现在的猜测是它与关闭解决方案有关,因为它出现在我提交更改的时间和我打开新项目的时间之间(不是VS项目,只是正在编辑的文件).我没有复制它.
什么创建了这个文件?它有什么作用?删除是否安全?是否应该检查源控制?