请考虑以下描述连续integer值范围的界面.
public interface IRange {
int Minimum { get;}
int Maximum { get;}
IRange LargestOverlapRange(IEnumerable<IRange> ranges);
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种有效的算法来找到给定IRange对象列表的最大重叠范围.下图简要概述了这个想法.顶部数字表示integer值,并用最小值和最大值|-----|表示IRange对象.我堆叠了IRange对象,以便解决方案易于可视化.
0123456789 ... N
|-------| |------------| |-----|
|---------| |---|
|---| |------------|
|--------| |---------------|
|----------|
Run Code Online (Sandbox Code Playgroud)
这里,该LargestOverlapRange方法将返回:
|---|
Run Code Online (Sandbox Code Playgroud)
由于该范围总共有4个'重叠'.如果有两个IRange相同数量的重叠,我想返回null.
这是我尝试过的一些简要代码.
public class Range : IRange
{
public IRange LargestOverlapRange(IEnumerable<IRange> ranges) {
int maxInt = 20000;
// Create a histogram of the counts
int[] histogram = new int[maxInt]; …Run Code Online (Sandbox Code Playgroud) 我有这种情况,其中内存保护是至关重要的.我试图将> 1 GB的肽序列读入共享相同序列的记忆和组肽实例中.我将Peptide对象存储在Hash中,因此我可以快速检查重复,但发现即使知道Set包含该对象,也无法访问Set中的对象.
内存非常重要,如果可能,我不想复制数据.(否则我会将我的数据结构设计为:peptides = Dictionary<string, Peptide>但是会复制字典和Peptide类中的字符串).下面是代码,向您展示我想要完成的任务:
public SomeClass {
// Main Storage of all the Peptide instances, class provided below
private HashSet<Peptide> peptides = new HashSet<Peptide>();
public void SomeMethod(IEnumerable<string> files) {
foreach(string file in files) {
using(PeptideReader reader = new PeptideReader(file)) {
foreach(DataLine line in reader.ReadNextLine()) {
Peptide testPep = new Peptide(line.Sequence);
if(peptides.Contains(testPep)) {
// ** Problem Is Here **
// I want to get the Peptide object that is in HashSet
// so I can add the …Run Code Online (Sandbox Code Playgroud) 相当基本的问题,想象一下
int a = 5;
int[] b = new int[1];
b[0] = 5;
Run Code Online (Sandbox Code Playgroud)
两者都做a,并b占用内存相同的空间?我认为b它比a在某处保存自己的长度要IntPtr.Size大,所以我认为它会更大,但我不确定.
我正在尝试编写代码,其中数组的长度在运行时确定,并且可以是1或更大(<10).我不知道如果长度设置为1我是否应该创建一个数组,或者在代码中有一个特殊情况并且只使用底层类型为length == 1.
我知道这a是一个值类型,而它b是一个引用类型.
我有一个使用ClickOnce部署的WinForms,C#解决方案,这会导致资源文件出现问题.简而言之,在使用ClickOnce部署后,类库项目中标记为Content的文件不会被复制到输出bin /文件夹.
这是解决方案的基本结构(它包含的项目比我下面列出的项目多得多)
Solution
|--Gui 1 Project
| |--References
| | |--ClassLibrary
|--Gui 2 Project
| |--References
| | |--ClassLibrary
|--Main Gui Project (StartUp Project)
| |--References
| | |--Gui 1 Project
| | |--Gui 2 Project
| | |--ClassLibrary
| |--Datafile.wav (Build Action: Content, Copy-if-newer)
| |--Mods.xml (Build Action: Content, Copy-if-newer)
| |--VariousSourceFiles.cs
|--ClassLibrary
| |--Resources
| | |--Elements.xml (Build Action: Content, Copy-if-newer)
| | |--AminoAcids.xml (Build Action: Content, Copy-if-newer)
| |--VariousSourceFiles.cs
Run Code Online (Sandbox Code Playgroud)
Main Gui项目是该程序的StartUp项目,是一个简单的MDI容器,可以在其中启动其他GUI应用程序.当我在我的开发机器上构建调试/发布模式时,一切都按预期工作.编译GUI程序,将Datafile.wav和Mods.xml文件复制到bin /文件夹,并将Elements.xml和AminoAcids.xml文件复制到bin/Resources /文件夹.该程序按预期运行,没有打嗝.
这是问题的开始,我使用VS2010中的Click-Once发布功能将内部程序发布给我们服务器上的同事.他们能够很好地安装程序甚至启动它.但是,只要他们单击使用其中一个资源文件(Elements.xml或AminoAcids.xml)的按钮,就会抛出一个无法找到该文件的异常.对于其他两个内容文件(Datafile.wav和Mods.xml),这不会发生,换句话说,这些文件被正确复制到最终目录.
所以我去Main Gui …
我正在尝试使用简单的模式匹配解析 Lua 中的化学公式。但是,我不知道如何将捕获组指定为可选。这是我想出的模式:
pattern = "(%u%l*)(%d*)"
Run Code Online (Sandbox Code Playgroud)
第一组捕获原子符号(即“H”、“He”等),第二组捕获分子中该原子的编号。这个值通常是一个整数值,但如果是1,则经常被省略,例如:
formula = "C2H6O"
Run Code Online (Sandbox Code Playgroud)
当我尝试进行全局匹配时,如果没有匹配,结果count是''而不是我预期的nil.
compound = {}
for atom,count in string.gmatch(formula, pattern) do
compound[atom] = count or 1
end
Run Code Online (Sandbox Code Playgroud)
显然我可以检查一下,count = ''但我很好奇 Lua 中是否有一个可选的捕获组。
我试图在一些数据上实现多属性排序,并通过背靠背来解决问题stable_sorts:
bool DecreasingA(const Data & a, const Data & b) {
return a.A >= b.A;
}
bool DecreasingB(const Data & a, const Data & b) {
if (a.B)
return true; // if a.B is true, maintain ordering
if (b.B)
return false; // a.B is false, but b.B is true, to swap elements
return true; // a.B and b.B are false, maintain ordering
}
std::vector<Data> myVector;
// add Data to vector here
std::stable_sort(myVector.begin(), myVector.end(), DecreasingA());
std::stable_sort(myVector.begin(), myVector.end(), DecreasingB());
Run Code Online (Sandbox Code Playgroud)
但是在我这样做之后, …
想象一下,在[0.0,n]范围内有一个连续的函数.是否有任何算法可以s比简单迭代更快地找到最小步长的函数的最大值?简单的迭代很容易编程,但是时间复杂度越大越好n / s.
double maxValue = 0;
double maxValueX = 0;
double s = 0.1 * n;
for (double x = 0.0; x <= n; x += s)
{
double value = someFunction(x);
if(value > maxValue) {
maxValue = value;
maxValueX = x;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过这种方法要快得多,但不知道它是否会卡在局部最大值上.
double min = 0;
double max = n;
int steps = 10;
increment = (max - min) / steps;
while (increment > s)
{
double maxValue = 0;
double maxValueX …Run Code Online (Sandbox Code Playgroud)