小编Moo*_*oop的帖子

在给定范围列表的情况下找到最大重叠范围的有效算法

请考虑以下描述连续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)

c# algorithm math dynamic-programming

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

如何在不枚举的情况下访问HashSet <TValue>的引用值?

我有这种情况,其中内存保护是至关重要的.我试图将> 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)

c# dictionary hashset

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

长度为1的数组是否与同一类型的单个变量大小相同?

相当基本的问题,想象一下

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是一个引用类型.

c# arrays

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

在ClickOnce部署期间,类库中定义的内容不会传输

我有一个使用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 …

c# clickonce visual-studio-2010 winforms

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

使用 Lua 模式匹配的可选组捕获

我正在尝试使用简单的模式匹配解析 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 中是否有一个可选的捕获组。

lua lua-patterns

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

多属性排序是反转元素

我试图在一些数据上实现多属性排序,并通过背靠背来解决问题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)

但是在我这样做之后, …

c++ sorting

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

以特定分辨率查找连续函数的最大值

想象一下,在[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)

c# algorithm

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