小编Sae*_*iri的帖子

(这= = null)在C#中!

由于在C#4中修复了一个错误,将打印以下程序true.(在LINQPad中试试)

void Main() { new Derived(); }

class Base {
    public Base(Func<string> valueMaker) { Console.WriteLine(valueMaker()); }
}
class Derived : Base {
    string CheckNull() { return "Am I null? " + (this == null); }
    public Derived() : base(() => CheckNull()) { }
}
Run Code Online (Sandbox Code Playgroud)

在VS2008的发布模式下,它会抛出InvalidProgramException.(在调试模式下,它工作正常)

在VS2010 Beta 2中,它没有编译(我没有尝试Beta 1); 我学到了很难的方法

this == null在纯C#中还有其他方法吗?

c# visual-studio-2010-beta-2 compiler-bug

129
推荐指数
4
解决办法
1万
查看次数

Manacher的算法(在线性时间内找到最长回文子串的算法)

在花了大约6-8个小时试图消化Manacher的算法之后,我准备好了.但在此之前,这是最后一次在黑暗中拍摄:有人可以解释一下吗?我不关心代码.我希望有人解释算法.

这里似乎是其他人在解释算法时似乎喜欢的地方:http: //www.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html

我理解你为什么要把字符串转换成'#ab#'到#a#b#b#a#之后我就输了.例如,前面提到的网站的作者说该算法的关键部分是:

                      if P[ i' ] ? R – i,
                      then P[ i ] ? P[ i' ]
                      else P[ i ] ? P[ i' ]. (Which we have to expand past 
                      the right edge (R) to find P[ i ])
Run Code Online (Sandbox Code Playgroud)

这似乎是错误的,因为他/她在一点上说当P [i'] = 7并且P [i]不小于或等于R-i时P [i]等于5.

如果你不熟悉这个算法,这里有一些更多的链接:http://tristan-interview.blogspot.com/2011/11/longest-palindrome-substring-manachers.html(我试过这个,但是术语很糟糕,令人困惑.首先,有些东西没有定义.还有太多的变量.你需要一个清单来回忆一下变量是指哪些变量.)

另一个是:http://www.akalin.cx/longest-palindrome-linear-time(祝你好运)

该算法的基本要点是在线性时间内找到最长的回文.它可以在O(n ^ 2)中以最小到中等的努力量完成.这个算法应该非常"聪明"才能将其降低到O(n).

algorithm palindrome

68
推荐指数
4
解决办法
4万
查看次数

如何比较两组1000个数字?

我必须检查大约1000个数字和1000个其他数字.

我加载了两个并比较了服务器端:

foreach( $numbers1 as $n1 ) {
  foreach( $numbers2 as $n2 ) {
    if( $n1 == $n2 ) {
      doBla();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这需要很长时间,所以我尝试使用两个隐藏div元素进行相同的比较客户端 .然后使用JavaScript比较它们.加载页面仍然需要45秒(使用隐藏div元素).

我不需要加载不相同的数字.

有更快的算法吗?我正在考虑比较它们的数据库端,只是加载错误号,然后对剩余的非错误号进行Ajax调用.但MySQL数据库是否足够快?

javascript php sql algorithm

64
推荐指数
9
解决办法
7万
查看次数

Java中任意集的笛卡尔积

您是否知道一些简洁的Java库,允许您制作两个(或更多)集的笛卡尔积?

例如:我有三套.一个是Person类的对象,第二个是类Gift的对象,第三个是GiftExtension类的对象.

我想生成一个包含所有可能的三元组Person-Gift-GiftExtension的集合.

集的数量可能会有所不同,所以我不能在嵌套的foreach循环中执行此操作.在某些情况下,我的应用程序需要制作一个Person-Gift对的产品,有时它是三人Person-Gift-GiftExtension,有时甚至可能会设置Person-Gift-GiftExtension-GiftSecondExtension-GiftThirdExtension等.

java cartesian-product

45
推荐指数
5
解决办法
4万
查看次数

C#中有"upto"方法吗?

这里有一些代码打印出从0到9的数字的平方:

for (int i = 0; i < 10; i++)
    Console.WriteLine(i*i);
Run Code Online (Sandbox Code Playgroud)

通过for循环从0到N加1 是一个非常常见的习语.

这是一种UpTo表达这种方法的方法:

class MathUtil
{
    public static void UpTo(int n, Action<int> proc)
    {
        for (int i = 0; i < n; i++)
            proc(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的方块示例现在是:

MathUtil.UpTo(10, (i) => Console.WriteLine(i * i));
Run Code Online (Sandbox Code Playgroud)

我的问题是,标准C#库是否带有类似上面的内容UpTo

理想情况下,我想要一种方法让'UpTo'成为所有整数对象的方法.所以我能做到:

var n = 10;

n.UpTo(...);
Run Code Online (Sandbox Code Playgroud)

这可能在C#中吗?

c#

22
推荐指数
5
解决办法
1600
查看次数

找到固定大小圆圈中包含的最多点

当一位朋友谈到编程竞赛时,我们想到了最好的方法:

给定一个点列表,找到覆盖最多点的预定大小的圆的中心.如果有几个这样的圈子,唯一重要的是找到其中一个.

示例输入:1000点,500x500空间和60直径的圆.

algorithm optimization geometry

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

如何在动态情境中找到最短路径

几天前,有人问我,如果我们在我们的环境中有一些代理商,并且他们想要从他们的消息来源到他们的目的地,那么我们如何才能找到他们所有人的最短路径,以便他们不应该在他们的步行.

问题的关键是所有代理人同时在环境中行走(可以通过无向加权图来建模),我们不应该有任何碰撞.我想到了这一点,但我找不到所有这些的最佳路径.但是肯定有太多启发式的想法来解决这个问题.

假定输入是图G(V,E),它们是在米剂:S 1,S 2,...,S 在启动和图的节点它们应该去节点d 1,... d 处结束.也可能是节点S iD i中存在冲突,但这些冲突并不重要,当它们位于其路径的内部节点时,它们不应该发生冲突.

如果它们的路径不应该有相同的内部节点,那将k-disjoint paths是NPC的一种问题,但是在这种情况下路径可以具有相同的节点,但是代理不应该同时在同一节点中.我不知道我能说出确切的问题陈述.如果令人困惑,请在评论中告诉我编辑它.

是否有任何最优和快速的算法(通过最优I均值,所有路径的长度总和尽可能最小,并且快速意味着良好的多项式时间算法).

algorithm shortest-path

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

动态图形中的最大流量

我正在寻找快速算法来计算动态图形中的最大流量(添加/删除具有相关边缘的节点到图形).即我们在G中有最大流量,现在添加/删除了相关边缘的新节点,我不想重新计算新图形的最大流量,事实上,我想使用此图形的先前可用结果.

任何非时间/内存消费者的预处理都是适当的.

最简单的想法是重新计算流量.

另一个简单的想法就是这样,保存以前maxflow计算中使用的所有扩充路径,现在用于添加顶点v,我们可以找到从源开始的简单路径(在前一步骤的更新容量图中),v然后转到目的地,但是问题是这条路应该简单,我找不到比O(n*E)更好的情况.(如果它只是一条路径或路径是不相交的,这可以在O(n + E)中完成,但事实并非如此).

另外对于删除节点以上的想法不起作用.

此外,我的问题与另一个关于动态边缘添加/删除的问题无关.

algorithm graph max-flow

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

找到两个缺少的数字

有一台机器有O(1)内存.我们想要第一次传递n个数字(逐个),我们再次排除两个数字,我们将n-2传递给机器.写一个找到缺失数字的算法.这是一个面试问题,我无法解决.

c++ algorithm math discrete-mathematics

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

动态编程:为什么Knuth对最优二叉搜索树O(n ^ 2)的改进?

这是"算法导论"第3版的练习15.5-4,这是关于Knuth对最优二叉搜索树的DP方法的改进.

最优二叉搜索树的DP算法是:

OPTIMAL_BST(p, q, n)
let e[1..n+1, 0..n], w[1..n+1, 0..n], and root[1..n, 1..n] be new tables
for i = 1 to n+1
    e[i, i - 1] = q[i - 1];
    w[i, i - 1] = q[i - 1];
for l = 1 to n
    for i = 1 to n - l + 1
        j = i + l - 1
        e[i, j] = INFINITY
        w[i, j] = w[i, j - 1] + p[j] + q[j]
        for r = i …
Run Code Online (Sandbox Code Playgroud)

algorithm dynamic-programming binary-search-tree

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