由于在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#中还有其他方法吗?
在花了大约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).
我必须检查大约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数据库是否足够快?
您是否知道一些简洁的Java库,允许您制作两个(或更多)集的笛卡尔积?
例如:我有三套.一个是Person类的对象,第二个是类Gift的对象,第三个是GiftExtension类的对象.
我想生成一个包含所有可能的三元组Person-Gift-GiftExtension的集合.
集的数量可能会有所不同,所以我不能在嵌套的foreach循环中执行此操作.在某些情况下,我的应用程序需要制作一个Person-Gift对的产品,有时它是三人Person-Gift-GiftExtension,有时甚至可能会设置Person-Gift-GiftExtension-GiftSecondExtension-GiftThirdExtension等.
这里有一些代码打印出从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#中吗?
当一位朋友谈到编程竞赛时,我们想到了最好的方法:
给定一个点列表,找到覆盖最多点的预定大小的圆的中心.如果有几个这样的圈子,唯一重要的是找到其中一个.
示例输入:1000点,500x500空间和60直径的圆.
几天前,有人问我,如果我们在我们的环境中有一些代理商,并且他们想要从他们的消息来源到他们的目的地,那么我们如何才能找到他们所有人的最短路径,以便他们不应该在他们的步行.
问题的关键是所有代理人同时在环境中行走(可以通过无向加权图来建模),我们不应该有任何碰撞.我想到了这一点,但我找不到所有这些的最佳路径.但是肯定有太多启发式的想法来解决这个问题.
假定输入是图G(V,E),它们是在米剂:S 1,S 2,...,S 米在启动和图的节点它们应该去节点d 1,... d 米处结束.也可能是节点S i或D i中存在冲突,但这些冲突并不重要,当它们位于其路径的内部节点时,它们不应该发生冲突.
如果它们的路径不应该有相同的内部节点,那将k-disjoint paths是NPC的一种问题,但是在这种情况下路径可以具有相同的节点,但是代理不应该同时在同一节点中.我不知道我能说出确切的问题陈述.如果令人困惑,请在评论中告诉我编辑它.
是否有任何最优和快速的算法(通过最优I均值,所有路径的长度总和尽可能最小,并且快速意味着良好的多项式时间算法).
我正在寻找快速算法来计算动态图形中的最大流量(添加/删除具有相关边缘的节点到图形).即我们在G中有最大流量,现在添加/删除了相关边缘的新节点,我不想重新计算新图形的最大流量,事实上,我想使用此图形的先前可用结果.
任何非时间/内存消费者的预处理都是适当的.
最简单的想法是重新计算流量.
另一个简单的想法就是这样,保存以前maxflow计算中使用的所有扩充路径,现在用于添加顶点v,我们可以找到从源开始的简单路径(在前一步骤的更新容量图中),v然后转到目的地,但是问题是这条路应该简单,我找不到比O(n*E)更好的情况.(如果它只是一条路径或路径是不相交的,这可以在O(n + E)中完成,但事实并非如此).
另外对于删除节点以上的想法不起作用.
此外,我的问题与另一个关于动态边缘添加/删除的问题无关.
有一台机器有O(1)内存.我们想要第一次传递n个数字(逐个),我们再次排除两个数字,我们将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 ×7
c# ×2
c++ ×1
compiler-bug ×1
geometry ×1
graph ×1
java ×1
javascript ×1
math ×1
max-flow ×1
optimization ×1
palindrome ×1
php ×1
sql ×1