这是我很久以前遇到的问题.我想我可能会问你的想法.假设我有一个非常小的数字列表(整数),4或8个元素,需要快速排序.什么是最好的方法/算法?
我的方法是使用max/min函数(10个函数来排序4个数字,没有分支,iirc).
// s(i,j) == max(i,j), min(i,j)
i,j = s(i,j)
k,l = s(k,l)
i,k = s(i,k) // i on top
j,l = s(j,l) // l on bottom
j,k = s(j,k)
Run Code Online (Sandbox Code Playgroud)
我想我的问题更多地与实现有关,而不是算法的类型.
此时它变得有点依赖于硬件,所以让我们假设带有SSE3的Intel 64位处理器.
谢谢
我正在尝试使用nvd3.js创建一个实时图表,它会定期更新,并且会产生实时处理数据的印象.
现在我已经能够创建一个定期更新图形的函数,但我无法在"状态"之间进行平滑过渡,例如向左转换的行.
这是我使用nvd3.js所做的,这里有趣的代码是:
d3.select('#chart svg')
.datum(data)
.transition().duration(duration)
.call(chart);
Run Code Online (Sandbox Code Playgroud)
现在,我已经能够使用d3.js生成我想要的东西,但我希望能够使用nvd3.js提供的所有工具.这是我想用nvd3制作的
使用d3.js进行转换的有趣代码是:
function tick() {
// update the domains
now = new Date();
x.domain([now - (n - 2) * duration, now - duration]);
y.domain([0, d3.max(data)]);
// push the accumulated count onto the back, and reset the count
data.push(Math.random()*10);
count = 0;
// redraw the line
svg.select(".line")
.attr("d", line)
.attr("transform", null);
// slide the x-axis left
axis.transition()
.duration(duration)
.ease("linear")
.call(x.axis);
// slide the line left
path.transition()
.duration(duration)
.ease("linear")
.attr("transform", "translate(" …Run Code Online (Sandbox Code Playgroud) 在遵循众多D3示例的同时,数据通常采用flare.json中给出的格式进行格式化:
{
"name": "flare",
"children": [
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{"name": "AgglomerativeCluster", "size": 3938},
:
Run Code Online (Sandbox Code Playgroud)
我有一个邻接列表如下:
A1 A2
A2 A3
A2 A4
Run Code Online (Sandbox Code Playgroud)
我想转换为上面的格式.目前,我在服务器端这样做,但有没有办法使用d3的功能实现这一目标?我在这里找到了一个,但这种方法似乎需要修改d3核心库,由于可维护性我不赞成.有什么建议?
我试图在d3 Force Directed Graph中向节点添加文本标签,似乎存在问题.这是我的小提琴:

当我添加节点名称时,如下所示:
node.append("text")
.attr("class", "word")
.attr("dy", ".35em")
.text(function(d) {
console.log(d.name);
return d.name;
});
Run Code Online (Sandbox Code Playgroud)
没有变化,但名字正在记录中.
当我尝试使用边界框时,节点标签出现,但节点堆叠在框的左上角,而节点链接很好.这个小提琴是我投入的努力的结果.任何人都可以告诉我什么是我做错了?
我是一名HTML/CSS开发人员,正在研究构建"家庭树"的javascript解决方案,这种解决方案需要以有意义的方式展示婚姻(当然来自家庭以外).
基本上我看着它立足于一个树状图的基础上,d3.js,例如http://bl.ocks.org/4063570,但我在努力寻找任何东西在那里,表示"结婚".
下面是我将基于它的数据的图像:

任何帮助/建议/链接将不胜感激!我只是不知道它是否可能,但是我很乐意使用d3.js,因为它看起来很精致,而且看起来很多功能.
我有一个计算几何问题,我觉得应该有一个相对简单的解决方案,但我无法弄明白.
我需要确定由几个线段定义的区域的非凸轮廓.
我知道各种非凸壳体算法(例如alpha形状),但我不需要完全通用的算法,因为线段在大多数情况下定义了一个独特的解决方案.
正如@ Jean-FrançoisCorbett指出的那样,有些情况下有多种解决方案.我显然需要更多地考虑我的定义.
但是,我要做的是逆向工程并使用专有的文件格式,以便我可以对自己和其他人收集的数据进行基本分析.文件格式很简单,但确定用于定义边界的算法要困难得多.
放入导致非唯一解决方案的许多边缘情况会导致相关软件在没有警告的情况下崩溃或者无法读取文件.
因此,当存在多个解决方案时,要么生成一个可接受的解决方案,要么能够确定存在多个解决方案,这是可以接受的.
多边形的轮廓不应该穿过任何段,并且应该由连接所有段的端点的线组成.所有段必须完全位于多边形的边界内或沿着多边形的边界.大纲中不能使用多个端点(通过在需要多边形关闭的软件库的末尾添加第一个点来忽略"关闭"多边形.).
如果有多个解决方案符合此标准,那么任何一种解决方案都是可以接受的.(能够确定解决方案何时非唯一,这将是非常好的,但这不是绝对必要的.)
举个例子,我有以下几点:

我想描述以下几个方面:

它也适用于非交叉段.例如

我认为(?)在任何一种情况下都有一个独特的解决方案,符合之前的标准.(编辑:一般来说,没有一个独特的解决方案,正如@ Jean-FrançoisCorbett所指出的那样.但是,我仍然对能够产生一种可接受的解决方案的算法感兴趣.)
对于测试用例,这是生成上述数字的代码.我在这里使用python,但问题是与语言无关.
import matplotlib.pyplot as plt
def main():
test1()
test2()
plt.show()
def test1():
"""Intersecting segments."""
segments = [[(1, 1), (1, 3)],
[(3.7, 1), (2, 4)],
[(2, 0), (3.7, 3)],
[(4, 0), (4, 4)],
[(4.3, 1), (4.3, 3)],
[(0, 2), (6, 3)]]
desired_outline = [segments[0][0], segments[5][0], segments[0][1],
segments[1][1], segments[2][1], segments[3][1],
segments[4][1], segments[5][1], segments[4][0],
segments[3][0], segments[1][0], segments[2][0],
segments[0][0]]
plot(segments, desired_outline)
def test2():
"""Non-intersecting segments."""
segments …Run Code Online (Sandbox Code Playgroud) python language-agnostic algorithm geometry computational-geometry
我在Mathematica中实现了一个四叉树.我不熟悉像Mathematica这样的函数式编程语言,我想知道我是否可以通过更好地使用模式来改进它或使其更紧凑.
(我知道我可以通过修剪未使用的节点来优化树,并且可能有更好的数据结构,如用于空间分解的kd树.)
此外,每次添加新点时,我仍然不满意复制整个树/表达式的想法.但我的理解是,对整个表达式进行操作而不修改部分是函数式编程方式.我对这方面的任何澄清表示感谢.
MV
代码
ClearAll[qtMakeNode, qtInsert, insideBox, qtDraw, splitBox, isLeaf, qtbb, qtpt];
(* create a quadtree node *)
qtMakeNode[{{xmin_,ymin_}, {xmax_, ymax_}}] :=
{{}, {}, {}, {}, qtbb[{xmin, ymin}, {xmax, ymax}], {}}
(* is pt inside box? *)
insideBox[pt_, bb_] := If[(pt[[1]] <= bb[[2, 1]]) && (pt[[1]] >= bb[[1, 1]]) &&
(pt[[2]] <= bb[[2, 2]]) && (pt[[2]] >= bb[[1, 2]]),
True, False]
(* split bounding box into 4 children *)
splitBox[{{xmin_,ymin_}, {xmax_, ymax_}}] := {
{{xmin, (ymin+ymax)/2}, {(xmin+xmax)/2, …Run Code Online (Sandbox Code Playgroud) 我正在使用d3.js树,并且想要动态添加节点,而不是预先加载整个树.
如何在单击节点时动态添加其他JSON节点,以修改以下内容?(见下面的链接,以及下面的代码)
http://mbostock.github.com/d3/talk/20111018/tree.html
因此,不是预先加载整个树,而是仅在单击父级时才检索子节点.我可以在toggle函数中检索子节点的json,但是我无法弄清楚如何将它们添加到树中.
var m = [20, 120, 20, 120],
w = 1280 - m[1] - m[3],
h = 800 - m[0] - m[2],
i = 0,
root;
var tree = d3.layout.tree()
.size([h, w]);
var diagonal = d3.svg.diagonal()
.projection(function(d) { return [d.y, d.x]; });
var vis = d3.select("#body").append("svg:svg")
.attr("width", w + m[1] + m[3])
.attr("height", h + m[0] + m[2])
.append("svg:g")
.attr("transform", "translate(" + m[3] + "," + m[0] + ")");
d3.json("flare.json", function(json) {
root = json;
root.x0 = …Run Code Online (Sandbox Code Playgroud) 我想在D3中创建一个时间序列折线图,下面的图表的较小版本允许用户放大图表的某些部分,如Google财经图表.
我发现的最接近的例子是这个泳道图:
有没有人在D3中使用折线图做任何这样的例子?
注意:我绝对想要一个小版本的图形,顶部有一个可调整大小的刷子,而不是像这个例子那样纯粹可拖动/可缩放的x轴.
理想情况下,我想使用人力车,但人力车的例子似乎只有一个范围滑块.所以人力车的例子会更好.