这是tarjan循环检测的一个有效的C#实现.
该算法可在此处找到:http: //en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm
public class TarjanCycleDetect
{
private static List<List<Vertex>> StronglyConnectedComponents;
private static Stack<Vertex> S;
private static int index;
private static DepGraph dg;
public static List<List<Vertex>> DetectCycle(DepGraph g)
{
StronglyConnectedComponents = new List<List<Vertex>>();
index = 0;
S = new Stack<Vertex>();
dg = g;
foreach (Vertex v in g.vertices)
{
if (v.index < 0)
{
strongconnect(v);
}
}
return StronglyConnectedComponents;
}
private static void strongconnect(Vertex v)
{
v.index = index;
v.lowlink = index;
index++;
S.Push(v);
foreach (Vertex w in …Run Code Online (Sandbox Code Playgroud) 每次我需要在使用C#的算法中做N次我写这个代码
for (int i = 0; i < N; i++)
{
...
}
Run Code Online (Sandbox Code Playgroud)
学习Ruby我已经学习了方法时间(),可以使用与此相同的语义
N.times do
...
end
Run Code Online (Sandbox Code Playgroud)
C#中的代码片段看起来更复杂,我们应该声明无用的变量i.
我试着编写返回IEnumerable的扩展方法,但我对结果不满意,因为我必须再次声明一个循环变量i.
public static class IntExtender
{
public static IEnumerable Times(this int times)
{
for (int i = 0; i < times; i++)
yield return true;
}
}
...
foreach (var i in 5.Times())
{
...
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用一些新的C#3.0语言功能使N次循环更优雅?
我正在Jekyll网站上工作,我正在尝试输出嵌套在行div中的三个列div.Liquid使用他们的cycle过滤器非常容易:
{% for p in site.categories.post %}
{% cycle 'add rows': '<div class="row">', nil, nil %}
<div class="column">
<a href="{{ p.url }}">{{ p.title }}</a>
</div>
{% cycle 'close rows': nil, nil, '</div>' %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
但是,只有当有3个,6个,9个等帖子时,这才真正有用.当帖子的总数不是三的倍数时,<div class="row">永远不会关闭 - for循环在结束标记作为close rows循环的一部分输出之前结束.
在Ruby,PHP或任何其他语言中,我可以使用模数运算符轻松修复此问题,因此除了close rows循环我将输出</div>时if site.categories.size % 3 == 0.但是,Liquid,因为它是一种安全的模板语言,不支持模数.
<div class="row">当帖子总数不是三的倍数时,我还能做些什么来正确关闭?
我最喜欢的面试问题之一是
在O(n)时间和O(1)空间中,确定链表是否包含循环.
这可以使用Floyd的循环寻找算法来完成.
我的问题是,在尝试检测二叉树是否包含循环时,是否可以获得如此好的时间和空间保证.也就是说,如果有人给你一个struct定义
struct node {
node* left;
node* right;
};
Run Code Online (Sandbox Code Playgroud)
您如何有效地验证给定结构确实是二叉树,而不是DAG或包含循环的图形?
是否存在一种算法,给定二叉树的根,可以确定该树是否包含O(n)时间并且优于O(n)空间的循环?显然,这可以使用标准DFS或BFS来完成,但这需要O(n)空间.可以在O(√n)空间内完成吗?O(log n)空间?或者(O圣)在O(1)空间?我很好奇,因为在链表的情况下,这可以在O(1)空间中完成,但我从未见过相应有效的算法.
我正在解决有向无环图上的问题.
但是我在一些有向无环图上测试我的代码时遇到了麻烦.测试图应该很大,并且(显然)是非循环的.
我尝试了很多代码来编写用于生成非循环有向图的代码.但我每次都失败了.
是否有一些现有的方法来生成我可以使用的非循环有向图?
什么是在无向图中找到哈密顿循环的动态规划算法?我在某处看到存在一种具有O(n.2^n)时间复杂度的算法.
说我有一个清单:
l = [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我想循环一下.通常,它会做这样的事情,
1, 2, 3, 4, 1, 2, 3, 4, 1, 2...
Run Code Online (Sandbox Code Playgroud)
我希望能够在周期中的某个点开始,不一定是索引,但可能与元素匹配.假设我想从列表中的任何元素开始==4,然后输出将是,
4, 1, 2, 3, 4, 1, 2, 3, 4, 1...
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?
在Haskell中,一些列表是循环的:
ones = 1 : ones
Run Code Online (Sandbox Code Playgroud)
其他人则不是:
nums = [1..]
Run Code Online (Sandbox Code Playgroud)
然后有这样的事情:
more_ones = f 1 where f x = x : f x
Run Code Online (Sandbox Code Playgroud)
这表示与该值相同的值ones,当然该值是重复序列.但它是否在内存中表示为循环数据结构是值得怀疑的.(一个实现可以这样做,但这个答案解释说"这不太可能在实践中发生".)
假设我们采用Haskell实现并在其中入侵一个内置函数isCycle :: [a] -> Bool,该函数检查参数的内存中表示的结构.True如果列表是物理循环的并且False参数的长度是有限的,则返回.否则,它将无法终止.(我想"在黑客入侵"因为在Haskell中编写该函数是不可能的.)
这个函数的存在是否会打破语言的任何有趣属性?
一个简单的程序,带有while( <> )句柄文件作为arguments(./program 1.file 2.file 3.file)和Unix系统的标准输入.
我认为它将它们连接在一起,并且工作是一行一行的.问题是,我怎么知道我正在使用第一个文件?然后是第二个.
举个简单的例子,我想在一行中打印文件的内容.
while( <> ){
print "\n" if (it's the second file already);
print $_;
}
Run Code Online (Sandbox Code Playgroud) 我想在页面加载时使用角度触发css动画.有没有办法计算角度的消化周期,例如控制器或指令?
我有一些角度动画,我想在页面加载时运行,使用ng-enter,ng-leave,ng-move等...使用ng-repeat指令.
从1.3.6开始,我知道角度等待应用任何动画,直到2个摘要周期发生,所以这些动画根本不会发生,因为数据(几乎总是)加载到我的第一个摘要周期的视图中应用.(酱:https://docs.angularjs.org/api/ngAnimate#css-staggering-animations)
我想知道是否有一些方法可以计算摘要周期并触发动画,或者在第二个摘要周期后加载数据?
此外,如果我等到2个摘要周期,是否有可能在某些情况下第二个周期不会发生,这意味着我的数据不会加载到视图中?如果是这种情况,有没有办法可以保证每次至少会发生2个消化周期?
作为临时修复,我使用$ timeout在500ms后加载我的数据,但我知道这是一个非常糟糕的主意.
(由于该项目的NDA,改变了某些事物的名称)
<div ng-repeat="pizza in pizzas" class="za" ng-click="bake(pizza)"></div>
Run Code Online (Sandbox Code Playgroud)
.za {
//other styles
&.ng-enter,
&.ng-leave,
&.ng-move {
transition: all 1s $slowOut;
transform: translate(1000px, 0px) rotateZ(90deg);
}
&.ng-enter,
&.ng-leave.ng-leave-active
&.ng-move, {
transform: translate(1000px, 0px) rotateZ(90deg);
}
&.ng-enter.ng-enter-active,
&.ng-leave,
&.ng-move.ng-move-active {
transform: translate(0, 0) rotateZ(0deg);
}
&.ng-enter-stagger,
&.ng-leave-stagger,
&.ng-move-stagger {
transition-delay: 2s;
transition-duration: 0s;
}
}
Run Code Online (Sandbox Code Playgroud)
// inside a controller
timeout(function() {
scope.pizza = [ // actually …Run Code Online (Sandbox Code Playgroud)