GVKun编程网logo

使用SQL在有向图中查找循环(sql在视图中查询)

5

对于使用SQL在有向图中查找循环感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sql在视图中查询,并且为您提供关于c–在链接列表中查找循环(获取分段错误)、c–我应该使用什么算法来查找有向

对于使用SQL在有向图中查找循环感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sql在视图中查询,并且为您提供关于c – 在链接列表中查找循环(获取分段错误)、c – 我应该使用什么算法来查找有向下限但没有上限的有向图上的最小流量?、Networkx不在有向图中绘制箭头、Oracle:使用SQL或PL/SQL在动态SQL中查找错误的位置的宝贵知识。

本文目录一览:

使用SQL在有向图中查找循环(sql在视图中查询)

使用SQL在有向图中查找循环(sql在视图中查询)

在查找循环方面已经存在一些问题,但是我没有找到SQL的解决方案(首选MSSQL)。

这些表将是Node(NodeID INT)和Edge(EdgeID INT,NodeID1 INT,NodeID2 INT)

在有向图中找到周期的性能很好的解决方案是什么?

c – 在链接列表中查找循环(获取分段错误)

c – 在链接列表中查找循环(获取分段错误)

该解决方案基于对计算机的非常重要的观察.
我系统中的指针大小为8个字节.
这个结构的大小

struct ll1
 {  
  int data;
  struct ll1 *next;
 };

是16个字节.
作为具有多个成员的结构指针,将始终具有一些尾随零.这是由于内存对齐.
所以我试图使用剩下的4个字节来存储访问标志.
当我为这四个字节分配0时,它不会给出错误但是
当我指定除零以外的值时,它会在下面的代码中给出分段错误.
PLZ有人解释为什么会这样吗?

#include<stdio.h>
#include<stdlib.h>
struct ll1
{
    int data;
    struct ll1 *next;
};
typedef struct ll1 ll;

void create(ll **root)
{

int t=1;
printf("\nEnter node value 0 if end:");
    scanf("%d",&t);
    if(t)
    {
        (*root)=(ll*)malloc(sizeof(ll))    ;
        (*root)->data=t;
        create(&(*root)->next); 
    }
    else
    (*root)=NULL;
}
int main()
{

    ll *node;
    create(&node);
    ll *temp=node,*temp2=node;
int j,size=0;

/*printing 4-4 bytes of the node */
while(temp->next)
{
    size++;
    int *p=(int *)temp;
    printf("\n%d %d %d %d",*(p),*(p+1),*(p+2),*(p+3));
    *(p+3)=0; // setting the value of last four byte zero
    temp=temp->next;

} 
printf("\n");

j=size/3;

/* making loop in the linklist */

while(j--)temp2=temp2->next;
temp=node;

while(temp->next!=NULL)temp=temp->next;
temp->next=temp2;   

/*loop created */



/* code for finding loop in the linklist */
printf("\nfinding loop in the linklist\n");
ll *root=node;  
int *pp=(int *)root;
printf("%d %d %d %d\n",*(pp),*(pp+1),*(pp+2),*(pp+3));
printf("%d \n",root->data);
while(*(pp+3)==0) 
{

    *(pp+3)=1; //when changed that line by *(pp+3)=0 it doesn't give any error 
    root=root->next; //move pointer to next
    pp=(int *)root;  // assign adress to integer pointer
    printf("%d %d %d %d\n",*(pp+3));  // segmentation fault is here 
    printf("%d \n",root->data);
}
printf("%d \n",root->data);
return 0;

}

GDB中的输出

(gdb) r 
Starting program: /home/kushagra/place/linklist/a.out <ll_in

Enter node value 0 if end:1
Enter node value 0 if end:2
Enter node value 0 if end:3
Enter node value 0 if end:4
Enter node value 0 if end:5
Enter node value 0 if end:6
Enter node value 0 if end:7
Enter node value 0 if end:8
Enter node value 0 if end:8
Enter node value 0 if end:0
1 0 6299696 0
2 0 6299728 0
3 0 6299760 0
4 0 6299792 0
5 0 6299824 0
6 0 6299856 0
7 0 6299888 0
8 0 6299920 0
8 0 6299952 0

finding loop in the linklist
1 0 6299696 0
1 

Program received signal SIGSEGV,Segmentation fault.
0x0000000000400a2e in main () at P_node.c:72
72          printf("%d %d %d %d\n",*(pp+3));  // segmentation fault is here

解决方法

它没有’尾随零’.它可能在int和指针之间有4个未使用的字节.

这*(pp 3)= 1可能修改指针内的四个字节.

使用:

struct ll1
 {  
  int data;
  int visited;
  struct ll1 *next;
 };

c – 我应该使用什么算法来查找有向下限但没有上限的有向图上的最小流量?

c – 我应该使用什么算法来查找有向下限但没有上限的有向图上的最小流量?

我应该使用什么算法来查找有图的最小流量,其中有下限但没有上限?比如这个简单的例子:

在文献中,这是最小的成本流问题.然而,在我的情况下,成本与每条边上所需流量的非零下限相同,所以我在上面提出问题.在文献中,问题是:找到单源/单宿有向无环图的最小成本流的最佳算法是什么,其中每个边具有无限容量,流上的非零下界,以及成本等于流量的下限.

根据我的研究,似乎人们处理任何类型网络的任何类型的最低成本的主要方式是将问题设置为LP-type problem并解决这个问题.然而,我的直觉是没有流量上限,即.具有无限容量的边缘,使问题更容易,所以我想知道是否有一种算法专门针对这种情况使用比单纯形法等更多的“图形”技术.人.

我的意思是,如果所有成本和下限都是1,如上所述…我们正在寻找一个涵盖所有边缘的流程,遵守流程规则,并且不会在从s到t的任何路径上推动太多流量.这只是感觉它不应该要求LP求解器,事实上维基百科关于最低成本流的文章说“如果容量约束被删除,问题就会减少到最短路径问题”,但我认为他们正在讨论下限全部为零的情况.

还有开源C/C++代码,以实现最低成本流量吗?从谷歌搜索可用的东西,我发现我可以自己设置问题作为LP问题,并用开源LP解算器解决,或者我可以使用LEMON,它为最低成本流提供了几种算法.据我所知,boost图库不包含实现.

还有别的事吗?

解决方法@H_301_14@
在没有上限的情况下,最简单的方法 – 最容易实现,理解并且相当有效 – 找到图的最小流量如下:

>找到一个可行的流程,即满足流量规则和流量下限但不一定是最小流量的流量.这可以通过对图形进行深度优先遍历,在我们遍历时跟踪当前路径,以及在访问先前发现的节点或t,目标节点时,以最大值更低的方式增加当前路径上的流量来实现. – 当前路径上未满足的边缘一直到t.
>通过解决最大流量问题,将可行流量转化为最小流量.您需要在图表上找到容量等于流量(e)的最大流量 – 下限(e),其中流量(e)表示来自可行流量的流量.从可行流量中减去的最大流量将是最小流量.

在图形也具有流上限的情况下,也可以执行上述版本.在那种情况下,步骤1更复杂,但可以通过在特殊构造的图上执行初始最大流量计算来解决.

Networkx不在有向图中绘制箭头

Networkx不在有向图中绘制箭头

如何解决Networkx不在有向图中绘制箭头

我有一个 5 节点的有向网络,我想使用 networkx 以图形方式表示。节点应该以这种方式连接:

  • 每个节点都用虚线连接
  • 从文件中读取活动连接并用黑色实线箭头表示
  • 与运行代码的节点(在本例中为节点 1)之间的活动连接应为红色。

代码做了我想要的,但出于某种原因,即使我在想要制作红色边缘时指定了 arrow=True,箭头也没有出现。出于某种原因,它似乎忽略了我在 edge_color 之后指定的每个选项。

我注意到,当我在所有节点之间绘制边时,如果我不指定 arrows=False,它会忽略 dashed'',alpha=0.5 并只绘制一条灰色实线。这与问题有关系吗?

这是我的代码,有问题的部分用注释注释:

  1. import networkx as nx
  2. import matplotlib.pyplot as plt
  3. class Graph(nx.DiGraph):
  4. def __init__(self,*args,**kwargs):
  5. self.nodeNum = 1
  6. self.pos = {''1'': (0,10),''2'': (10,3),''3'': (6,-8),''4'': (-6,''5'': (-10,3)}
  7. self.allConns = []
  8. for i in range(5):
  9. for j in range(i,5):
  10. self.allConns.append((str(i+1),str(j+1)))
  11. super().__init__(*args,**kwargs)
  12. def read_connections(self):
  13. filename = ''PATH/TO/FILE''
  14. with open(filename) as f:
  15. self.connList = []
  16. self.nodeConns = []
  17. for line in f:
  18. if line[-2] == ''1'':
  19. self.connList.append((str(line[0]),str(line[1])))
  20. if line[0] == self.nodeNum or line[1] == self.nodeNum:
  21. self.nodeConns.append((str(line[0]),str(line[1])))
  22. else:
  23. pass
  24. else:
  25. pass
  26. def generate_graph(self):
  27. self.read_connections()
  28. self.add_nodes_from(self.pos.keys())
  29. self.add_edges_from(self.connList)
  30. def draw_graph(self,fig=None,ax=None,show=False):
  31. if fig == None:
  32. fig = plt.figure()
  33. if ax == None:
  34. ax = fig.add_subplot(111)
  35. ax.axis(''off'')
  36. options = {''node_color'': ''cyan'',''node_size'': 1500,''width'': 2,''arrowstyle'': ''-|>'',''arrowsize'': 14,''font_size'': 20
  37. }
  38. # This works,but if I do not specify arrows=False it draws solid lines with no transparency
  39. nx.draw_networkx_edges(self,self.pos,ax=ax,edgelist=self.allConns,edge_color=''grey'',style=''dashed'',alpha=0.5,arrows=False)
  40. # This is the main part which works. It connects the nodes from the file with black arrows
  41. nx.draw_networkx(self,arrows=True,**options)
  42. # This is the part that gives me problems. It seems to ignore every option after edge_color
  43. nx.draw_networkx_edges(self,edgelist=self.nodeConns,edge_color=''r'',style=''solid'',alpha=1,width=3,arrowsize=14,arrowstyle=''-|>'')
  44. nx.draw_networkx_nodes(self,nodelist=[self.nodeNum],node_color=''r'',node_size=1500)
  45. fig.tight_layout()
  46. if show == True:
  47. fig.show()
  48. if __name__ == ''__main__'':
  49. graph = Graph()
  50. graph.generate_graph()
  51. graph.draw_graph(show=True)

以及结果示例。请注意红色边缘如何没有箭头。

Example

解决方法

我很确定箭头已绘制,但根本不可见,因为之后您将绘制具有更高节点大小的节点作为默认值。将 node_sizedraw_networkx_edges 应该可以解决您的问题

  1. nx.draw_networkx_edges(self,self.pos,ax=ax,edgelist=self.nodeConns,edge_color=''r'',style=''solid'',alpha=1,arrows=True,width=3,arrowsize=14,arrowstyle=''-|>'',node_size=1500,)

draw_networkx_edges 的文档还包含以下注释

对于有向图,箭头绘制在头端。 (...) 确保包含 node_size 作为关键字参数;箭头是根据节点的大小绘制的

Oracle:使用SQL或PL/SQL在动态SQL中查找错误的位置

Oracle:使用SQL或PL/SQL在动态SQL中查找错误的位置

如何在PL / sql或sql中的动态sql语句中找到错误的位置?

从sql * Plus我看到错误的位置,例如,无效的sql DML语句:

SYS@orcl> SELECT
       2    X
       3  FROM
       4    TABLEX
       5  /
  TABLEX
  *
ERROR at line 4:
ORA-00942: table or view does not exist

sql * Plus使用行号显示错误,并打印和标记与发现错误的星号对齐.

转换为动态sql,我可以得到错误代码(sqlCODE)和错误消息(sqlERRM):

SYS@orcl> SET SERVEROUTPUT ON
SYS@orcl> BEGIN
       2    EXECUTE IMMEDIATE 'SELECT X FROM TABLEX';
       3  EXCEPTION
       4    WHEN OTHERS THEN
       5      DBMS_OUTPUT.PUT_LINE('sqlCODE:' || sqlCODE);
       6      DBMS_OUTPUT.PUT_LINE('sqlERRM:' || sqlERRM);
       7  END;
       8  /
sqlCODE:-942
sqlERRM:ORA-00942: table or view does not exist

但是如何在动态sql字符串中获取错误的位置?

我看到Oracle提供了一个sql通信区域(sqlCA),其中包含有关错误的有趣信息.特别是:

> sqlCODE和sqlERRM字段(可能是使用相应PL / sql函数检索的数据的来源),
> sqlERRD字段,其中sqlERRD(5)元素给出’解析错误偏移’.

是否可以从PL / sql或sql访问sqlERRD?如果是这样,怎么样?如果没有,还有哪种技术可以从PL / sql或sql中提供错误的位置?

(这里http://docs.oracle.com/cd/B28359_01/appdev.111/b31231/chapter8.htm#BABIGBFF sqlCA已记录并使用Pro * C进行访问.)

(这里的答案how to declare SQLCA.SQLERRD?似乎表明sqlERRD没有在PL / sql中定义,因此无法访问.)

(这里的讨论Why doesn’t Oracle tell you WHICH table or view does not exist?给出了一些建议,用于显示使用跟踪文件的错误sql并在一些开发工具中显示错误的位置.)

你有一个用于在 dbms_utility中提取错误消息的包
begin 
    .. generate error
exception when others then 
    dbms_output.put_line(
        dbms_utility.format_call_stack()      || chr(10) || 
        dbms_utility.format_error_backtrace() || chr(10) || 
        dbms_utility.format_error_stack())
end;

今天的关于使用SQL在有向图中查找循环sql在视图中查询的分享已经结束,谢谢您的关注,如果想了解更多关于c – 在链接列表中查找循环(获取分段错误)、c – 我应该使用什么算法来查找有向下限但没有上限的有向图上的最小流量?、Networkx不在有向图中绘制箭头、Oracle:使用SQL或PL/SQL在动态SQL中查找错误的位置的相关知识,请在本站进行查询。

本文标签: