以下代码:
List<Interval> intervals = new List<Interval>();
List<int> points = new List<int>();
//Initialization of the two lists
// [...]
foreach (var point in points)
{
intervals.RemoveAll (x => x.Intersects (point));
}
Run Code Online (Sandbox Code Playgroud)
当列表大小为10000时,至少比这快100倍:
List<Interval> intervals = new List<Interval>();
List<int> points = new List<int>();
//Initialization of the two lists
// [...]
foreach (var point in points)
{
for (int i = 0; i < intervals.Count;)
{
if (intervals[i].Intersects(point))
{
intervals.Remove(intervals[i]);
}
else
{
i++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这怎么可能?使用"RemoveAll"在引擎盖下执行什么操作?根据MSDN,"RemoveAll"执行线性搜索,因此在O(n)中.所以我期望两者都有类似的表现.
当用"RemoveAt"替换"Remove"时,迭代速度要快得多,与"RemoveAll"相当.但是,这两个 "删除"和"RemoveAt移除"有O(n)的复杂性,那么为什么它们之间的性能差别这么大?难道只是因为"删除(项目)"将列表元素与"项目"进行比较,"RemoveAt"不执行任何比较?
输入是正整数或空整数的数组A和另一整数K.
我们应该将A分成K个连续元素块(通过"分区",我的意思是A的每个元素都属于某个块,而2个不同的块不包含任何共同的元素).
我们将块的总和定义为块的元素的总和.
目标是在K个块中找到这样的分区,使得每个块的最大值(让我们称之为" MaxSumBlock ")最小化.
我们需要输出MaxSumBlock(我们不需要找到实际的分区)
这是一个例子:
输入:
A = {2, 1, 5, 1, 2, 2, 2}
K = 3
Run Code Online (Sandbox Code Playgroud)
预期产量:
MaxSumBlock: 6
(with partition: {2, 1}, {5, 1}, {2, 2, 2})
Run Code Online (Sandbox Code Playgroud)
在预期输出中,每个块的总和为3,6和6.最大值为6.
这是一个非最佳分区:
partition: {2, 1}, {5}, {1, 2, 2, 2}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,每个块的总和是3,6和7.因此最大值是7.这不是正确的答案.
什么算法解决了这个问题?
编辑:K和A的大小不大于100'000.A的每个元素不大于10'000
从捆绑软件执行wix软件包会在升级过程中输出“错误1316:指定的帐户已存在”。Windows Installer如何输出此错误代码?恐怕没有太多的文档。
我们以前发布了一个包含单个msi软件包的产品,现在我们正在准备一个升级,其中包括一个包含该msi软件包新版本的wix捆绑软件。原始msi软件包与更新之间的产品代码和文件名未更改。
编辑: MSI程序包目前不支持升级。当用户需要升级时(无论是主要升级,次要升级还是小更新),他必须首先手动卸载以前的软件包...
编辑2:我刚刚删除了对util扩展的引用进行编译,并且安装程序似乎运行正常……尽管如此,我仍然需要对其进行全面测试。
在我的 wix 源代码中,我必须在注册表中查找 2 个条目才能获取安装目录:
<Property Id="INSTALLDIR_A">
<RegistrySearch Id='RegA' Type='raw'
Root='HKLM' Key='Software\Path\To\A' Name='InstallLocation' />
Run Code Online (Sandbox Code Playgroud)
<Property Id="INSTALLDIR_B">
<RegistrySearch Id='RegB' Type='raw'
Root='HKLM' Key='Software\Path\To\B' Name='InstallLocation' />
Run Code Online (Sandbox Code Playgroud)
我的安装目录必须是 INSTALLDIR_A 或 INSTALLDIR_B。如果我只需要查看 1 个条目,我会这样实现:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLDIR" Name="My path">
<!-- further code -->
</Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)
但我希望 INSTALLDIR 为 INSTALLDIR_A 或 INSTALLDIR_B,具体取决于定义的是哪一个。如何实现这一目标?
我有一个 ~350k 行的 pandas 系列,我想使用由 ~100 个子字符串组成的正则表达式来应用pandas.Series.str.extract函数,例如:
'(item0|item1|item2|item3|item4|item5|item6|item7|item8|item9|item10|item11|item12|item13|item14|item15|item16|item17|item18|item19|item20|item21|item22|item23|item24|item25|item26|item27|item28|item29|item30|item31|item32|item33|item34|item35|item36|item37|item38|item39|item40|item41|item42|item43|item44|item45|item46|item47|item48|item49|item50|item51|item52|item53|item54|item55|item56|item57|item58|item59|item60|item61|item62|item63|item64|item65|item66|item67|item68|item69|item70|item71|item72|item73|item74|item75|item76|item77|item78|item79|item80|item81|item82|item83|item84|item85|item86|item87|item88|item89|item90|item91|item92|item93|item94|item95|item96|item97|item98|item99|item100)'
提取速度太慢:在我的 jupyter notebook (Python 3.9) 中需要 1 分钟。为什么这么慢,如何加快速度?
编辑 1我以“itemX”为例,但它可以被任何子字符串替换。正则表达式可能类似于
'(carrageenan|dihydro|basketball|etc...)'
Run Code Online (Sandbox Code Playgroud)
编辑 2对一些评论的回答:
re.compile()如果您运行的程序不断产生内存泄漏,您的计算机有什么损害?
例如:
while(true)
{
char* c = malloc(sizeof(char));
c = NULL;
}
Run Code Online (Sandbox Code Playgroud)
然后让代码执行数小时或数天?
什么是托管安装?“msi 正在服务器端运行”是什么意思?“可以将 msi 属性传递给服务器端”是什么意思?
这个问题来自“Property”元素“Secure”属性的wix文档:
Denotes that the Property can be passed to the server side when doing a managed installation with elevated privileges. See the SecureCustomProperties Property for more information.
Run Code Online (Sandbox Code Playgroud) 在C#.net窗体应用程序中,我有一个带有"next"和"previous"按钮的对话窗口,我想根据用户按下的按钮"移动到下一页或上一页".
怎么做到这一点?
wix ×3
c# ×2
performance ×2
.net ×1
algorithm ×1
bundle ×1
c ×1
dialog ×1
directory ×1
linq ×1
memory-leaks ×1
pandas ×1
partitioning ×1
python ×1
regex ×1
registry ×1
server-side ×1
upgrade ×1
winforms ×1