我读过几篇文章,声明List.RemoveAt()处于O(n)时间.
如果我这样做:
var myList = new List<int>();
/* Add many ints to the list here. */
// Remove item at end of list:
myList.RemoveAt(myList.Count - 1); // Does this line run in O(n) time?
Run Code Online (Sandbox Code Playgroud)
从列表末尾删除应该是O(1),因为它只需要减少列表计数.
我是否需要编写自己的类来执行此操作,或者删除C#列表末尾的项目是否已在O(1)时间内执行?
我在实现IEnumerable接口的对象池中有以下代码.
public IEnumerable<T> ActiveNodes
{
get
{
for (int i = 0; i < _pool.Count; i++)
{
if (_pool[i].AvailableInPool)
{
yield return _pool[i];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知(根据这个问题),这将产生垃圾,因为需要收集IEnumerable对象._pool中的所有元素都不会被收集,因为池的目的是保持对所有元素的引用以防止垃圾创建.
任何人都可以建议一种允许迭代_pool以便不生成垃圾的方法吗?
在池上迭代时,池中的所有项都AvailableInPool == true
应该迭代.订单无关紧要.
这个项目工作正常,然后我重新启动我的电脑安装一个新的GPU,现在它在我尝试运行它时产生以下错误:
Error while trying to run project: Unable to start program:
"E:\Workspace\...\....exe"
Cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
我已确认提到的文件确实存在于错误消息指定的路径中.
我试过"清洁解决方案"和"重建解决方案".
手动导航到可执行文件并运行它.当我按下VS2010中的"运行"按钮时,会产生上述错误.
有谁知道为什么会发生这种情况?
如果我使用public int I;
(或任何其他字段)创建一个类来创建一个继承自具有的基类的类,编译器是否会生成相同的IL public int I;
?
无论哪种方式,结果类的行为都相同,但编译器的行为是否相同?
即,编译器只是将代码从基类复制粘贴到派生类中,还是在继承时实际创建了两个不同的类对象?
class A
{
public int I;
}
class B : A
{
}
Run Code Online (Sandbox Code Playgroud)
现在以下两个DoSomething()调用之间有任何性能差异吗?
var a = new A();
var b = new B();
DoSomething(a.I);
DoSomething(b.I); // Is this line slower than the above line due to inheritance?
Run Code Online (Sandbox Code Playgroud)
尝试忽略编译器可能针对此特殊情况执行的任何优化.我的问题是关于C#中的继承是否具有相关的性能损失.大多数时候我不在乎,但有时我想优化一段高频代码.
我在prolog中使用以下代码实现了以下功能:
abs2(X, Y) :- X < 0, Y is -X.
abs2(X, X) :- X >= 0, !.
Run Code Online (Sandbox Code Playgroud)
如何在不使用cut("!")的情况下实现此功能?
我创建了两个文件:test.py和test1234.py
test.py包含:
import test1234
t = test1234.test()
Run Code Online (Sandbox Code Playgroud)
test1234.py包含:
class test():
def __init__(self):
Run Code Online (Sandbox Code Playgroud)
当放在同一目录中时,python test.py
运行没有错误.
但是,如果我创建一个目录test1234并将test1234.py和一个空的init .py放在此目录中,则会python test.py
出现错误:
AttributeError:'module'对象没有属性'test'
我需要做什么才能让test.py能够test
在test1234.py中查看该类?
给定一个整数数组,找到一组至少一个总和为0的整数.
例如,给定[-1, 8, 6, 7, 2, 1, -2, -5]
,算法可以输出,[-1, 6, 2, -2, -5]
因为这是输入数组的子集,其总和为0.
解决方案必须在多项式时间内运行.
在SWI-Prolog的用户模式中,我定义了一个函数如下:
|: test1(+X,+Y) :- X >= 0, X =:= Y.
Run Code Online (Sandbox Code Playgroud)
现在处于查询模式:
?- test1(1, 1).
false.
Run Code Online (Sandbox Code Playgroud)
我期望这返回"真",因为1大于0而1等于1.
那我哪里出错了?
在我的crontab文件中,我执行一个这样的脚本(我使用crontab编辑sudo crontab -e
):
01 * * * * bash /etc/m/start.sh
Run Code Online (Sandbox Code Playgroud)
该脚本运行其他一些脚本,如下所示:
sudo bash -c "/etc/m/abc.sh --option=1" &
sleep 2
sudo bash -c "/etc/m/abc.sh --option=2" &
Run Code Online (Sandbox Code Playgroud)
当cron运行脚本时start.sh
,我会ps aux | grep abc.sh
看到abc.sh
脚本正在运行.
几秒钟后,脚本不再运行,即使abc.sh
需要几个小时才能完成.
如果我sudo bash /etc/m/start.sh &
从命令行执行操作,一切正常(abc.sh
脚本在后台运行数小时,直到完成).
我该如何调试?
我正在做的是阻止这些脚本在后台运行,直到它们完成为止?
说我得到n = 32.我想知道log_2(n)是什么.在这种情况下,log_2(32)= 5.
一般来说,计算2 ^ k数的对数的最快方法是什么?
即给定n = 2 ^ k.log_2(n)= b.找到b.
允许按位操作.
当我编译HLSL着色器pow(foo, 6)
或者pow(foo, 8)
,编译器创建具有比如果我创建相同的着色器约10多指令集会pow(foo, 9)
或pow(foo,10)
或pow(foo,7)
.
这是为什么?
如果我运行 python 控制台并执行
import matplotlib
matplotlib.__version__
import matplotlib.gridspec as gs
Run Code Online (Sandbox Code Playgroud)
我看到matplotlib版本是1.2.1。
如果我这样做,help(gs)
我会看到 Gridspec 类。
然而下面的代码
import matplotlib
import matplotlib.gridspec as gs
g = gs.Gridspec(1,1)
Run Code Online (Sandbox Code Playgroud)
产生错误:
AttributeError: 'module' object has no attribute 'Gridspec'
为什么我无法创建新的 Gridspec 对象?
c# ×4
prolog ×2
python ×2
algorithm ×1
bash ×1
big-o ×1
cron ×1
hlsl ×1
inheritance ×1
iteration ×1
math ×1
matplotlib ×1
module ×1
performance ×1
prolog-cut ×1