亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? network.java

?? MASON代表多主體鄰里或網絡仿真(Multi-Agent Simulator of Neighborhoods or Networks)。它是喬治梅森大學用Java開發的離散事件多主體仿真核心庫
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
package sim.field.network;import sim.util.*;import java.util.*;/** The Network is a field which stores binary graph and multigraph structures of all kinds, using hash tables to allow    reasonably rapid dynamic modification.        <p>The nodes of a Network's graph can be any arbitrary, properly hashable object.  The edges of the    graph are members of the Edge class.  This class is little more than a wrapper around arbitrary object as well (the Edge's 'info'    object).  Thus your graph's nodes and edges can essentially be objects entirely of your choosing.        <p>Edge objects also contain pointers to the Nodes that they are to and from (plus some auxillary index information    for speed).        <p>Nodes and Edges are stored in the Network using two data structures: a Bag containing all the nodes in the Field;    and a HashMap which maps each Node to a container holding the Node's index in the Bag, plus a Bag of the Node's outgoing    Edges and a Bag of the Node's incoming Edges.  Ordinarily you won't fool with these structures other than to scan through    them (in particular, to scan rapidly through the allNodes bag rather than use an iterator).        <p>To add a node to the Network, simply use addNode(node).  To remove a node, use removeNode(node).    To add an edge to the Network, use addEdge(fromNode,toNode,edgeInfoObject), where edgeInfoObject is your    arbitrary edge object. Alternatively, you can make an Edge object from scratch and add it with addEdge(new Edge(fromNode, toNode, edgeInfoObject)).    You remove edges with removeEdge(edge).  If you add an edge, and its nodes have not been added yet, they will    automatically be added as well.        <p>Traversing a Network is easy.      To get a Bag of all the incoming (or outgoing) Edges to a node, use getEdgesIn(node) or getEdgesOut(node).    Do <b>not</b> add or remove Edges from this Bag -- it's used internally and we trust you here.  Also don't expect the    Bag to not change its values mysteriously later on.  Make a copy of the Bag if you want to keep it and/or modify it.    Once you have an Edge, you can call its to() method and from() methods to get the nodes it's from and to, and you can    at any time get and modify its info object.  The to() and from() are fast and inlined.        <p>However, the getEdgesIn(node) and getEdgesOut(node) methods are not super fast: they require a hash lookup.  If you    are planning on applying an algorithm on the Network which doesn't change the topology at all but traverses it a lot    and changes just the <b>contents</b> of the edge info objects and the node object contents, you might consider first     getting an adjacency list for the Network with getAdjacencyList(...), or an adjacency matrix with getAdjacencyMatrix(...)    or getMultigraphAdjacencyMatrix(...).  But remember that as soon as the topology changes (adding/deleting a node or edge),    the adjacency list is invalid, and you need to request another one.        <p><b>Computational Complexity.</b>  Adding a node or an edge is O(1).  Removing an edge is O(1).  Removing a node is O(m), where    m is the total number of edges in and out of the node.  Removing all nodes is O(1) and fast.  Getting the in-edges or out-edges for a node    is O(1).  Getting the to or from node for an edge is O(1) and fast.        <p><b>Warning About Hashing.</b>  Java's hashing method is broken in an important way.  One can override the hashCode() and equals()    methods of an object so that they hash by the value of an object rather than just the pointer to it.  But if this is done, then if    you use this object as a key in a hash table, then <i>change</i> those values in the object, it will break the hash table -- the key    and the object hashed by it will both be lost in the hashtable, unable to be accessed or removed from it.  The moral of the story is:    do not override hashCode() and equals() to hash by value unless your object is <i>immutable</i> -- its values cannot be changed.  This    is the case, for example, with Strings, which hash by value but cannot be modified.  It's also the case with Int2D, Int3D, Double2D,    and Double3D, as well as Double, Integer, etc.  Some of Sun's own objects are broken in this respect: Point, Point2D, etc. are both    mutable <i>and</i> hashed by value.        <p>This affects you in only one way in a Network: edges are hashed by nodes.  The Network permits you to use any object    as a node -- but you have been suitably warned: if you use a mutable but hashed-by-value node object, do NOT modify its values while    it's being used as a key in the Network.        <p><b>Directed vs. Undirected Graphs.</b>  Networks are constructed to be either directed or undirected, and they cannot be changed    afterwards.  If the network is directed, then an Edge's to() and from() nodes have explicit meaning: the Edge goes from() one node to()    another.  If the network is undirected, then to() and from() are simply the two nodes at each end of the Edge with no special meaning,    though they're always consistent.  The convenience method <i>edge</i>.getOtherNode(<i>node</i>) will provide "other" node (if node is to(),    then from() is returned, and vice versa).  This is particularly useful in undirected graphs where you could be entering an edge as to()    or as from() and you just want to know what the node on the other end of the edge is.            <p>There are three methods for getting all the edges attached to a node: getEdgesIn(), getEdgesOut(), and the less efficient getEdges().  These methods    work differently depending on whether or not the network is directed:            <p><table width="100%" border=0>    <tr><td><td><b>Directed</b><td><b>Undirected</b>    <tr><td><b>getEdgesIn()</b><td>Bag&nbsp;of&nbsp;incoming&nbsp;edges<td>Bag&nbsp;of&nbsp;all&nbsp;edges    <tr><td><b>getEdgesOut()</b><td>Bag&nbsp;of&nbsp;outgoing&nbsp;edges<td>Bag&nbsp;of&nbsp;all&nbsp;edges    <tr><td><b>getEdges()</b><td><i>Modifiable</i>&nbsp;Bag&nbsp;of&nbsp;all&nbsp;edges<td><i>Modifiable</i>&nbsp;Bag&nbsp;of&nbsp;all&nbsp;edges    </table>            <p><b>Hypergraphs.</b> Network is binary.  In the future we may provide a Hypergraph facility if it's needed, but for now you'll    need to make "multi-edge nodes" and store them in the field, then hook them to your nodes via Edges.  For example, to store the    relationship foo(node1, node2, node3), here's one way to do it:    <ol>    <li>Make a special foo object.    <li>field.addEdge(foo,node1,new Double(0));    <li>field.addEdge(foo,node2,new Double(1));    <li>field.addEdge(foo,node3,new Double(2));    </ol>*/public class Network implements java.io.Serializable    {    final public boolean directed;        /** Constructs a directed or undirected graph. */    public Network(boolean directed){this.directed = directed;  }    /** Constructs a directed graph */    public Network(){this(true); }                /** Hashes Network.IndexInOut structures by Node.  These structures        contain the incoming edges of the Node, its outgoing edges, and the index of        the Node in the allNodes bag. */    public HashMap indexOutInHash = new HashMap();    // perhaps rather than using a bag we should use an edge array... it'd be faster...    /** All the objects in the sparse field.  For fast scans.  Do not rely on this bag always being the same object. */    public Bag allNodes = new Bag();            // returned instead of null for those methods which require a guarantee that the returned Bag should never be touched.    final Bag emptyBag = new Bag();    /** Creates and returns an adjacency list.  If you're doing lots of operations (especially network traversals)        which won't effect the topology of the network, an adjacency list structure might be more efficient for you to access rather than lots of        calls to getEdgesIn() and getEdgesOut() etc.  Building the list is an O(#edges) operation.                <p>The adjacency list is an array of Edge arrays.  Each edge array holds all outgoing edges from a node        (if outEdges is true -- otherwise it's the incoming edges to the node).  The edge arrays are ordered in        their parent array in the same order that the corresponding nodes are ordered in the allNodes bag.                   <p>As soon as you modify any part of the Network's topology (through addEdge(), addNode(), removeEdge(),        removeNode(), removeAllNodes(), etc.), the adjacency list data is invalid and should not be used.  Instead, request        a new adjacency list.                 <p>You can modify these edge arrays any way you like, though the Edge objects are the actual Edges.    */    public Edge[][] getAdjacencyList(boolean outEdges)        {        final Edge[][] list = new Edge[allNodes.numObjs][];        for(int x=0;x<allNodes.numObjs;x++)            {            // load each list slot with an array consisting of all in or out edges for the node            final Bag edges =                 (outEdges ? getEdgesOut(allNodes.objs[x]) : getEdgesIn(allNodes.objs[x]));            list[x] = new Edge[edges.numObjs];            final Edge[] l = list[x];  // a little faster, one less level of indirection            final int n = edges.numObjs;  // likewiswe            final Object[] objs = edges.objs; // likewise            System.arraycopy(objs,0,l,0,n); // I don't know if this is faster or not, given the type mismatch -- Sean            /*            for(int y=0;y<n;y++)                          l[y] = (Edge)(objs[y]);  // hmmm, can we do an array copy across array types?            */            }        return list;        }            /** Creates and returns a simple adjacency matrix, where only one edge between any two nodes is considered -- if you're        using a multigraph, use getMultigraphAdjacencyMatrix() instead.  If you're doing lots of operations (especially network traversals)        which won't effect the topology of the network, an adjacency matrix structure might be more efficient for you to access rather than lots of        calls to getEdgesIn() and getEdgesOut() etc.  Building the matrix is an O(#edges + #nodes^2) operation.                <p>The adjacency matrix is a two-dimensional array of Edges, each dimension as long as the number of nodes in the graph.        Each entry in the array is either an Edge FROM a node TO another, or it is null (if there is no such edge).  If there are multiple        edges between any two nodes, an arbitrary one is chosen.  The Edge array returned is organized as Edge[FROM][TO].        The indices are ordered in the same order that the corresponding nodes are ordered in the allNodes bag.                   <p>As soon as you modify any part of the Network's topology (through addEdge(), addNode(), removeEdge(),        removeNode(), removeAllNodes(), etc.), the adjacency matrix data is invalid and should not be used.  Instead, request        a new adjacency matrix.                 <p>You can modify the array returned any way you like, though the Edge objects are the actual Edges.    */    public Edge[][] getAdjacencyMatrix()        {        final int n = allNodes.numObjs;        final Edge[][] matrix = new Edge[n][n];   // I assume it filled with nulls?        Iterator nodeIO = indexOutInHash.values().iterator();        while(nodeIO.hasNext()) // this replaces n hash lookups with n class casts            {            IndexOutIn ioi = (IndexOutIn)nodeIO.next();            if(ioi.out==null) continue;            int outDegree = ioi.out.numObjs;            Edge[] outEdges = matrix[ioi.index];            Object sourceNode =  allNodes.objs[ioi.index];                                    for(int i=0;i<outDegree;i++)                {                Edge e = (Edge)ioi.out.objs[i];                // this is getNodeIndex without the function call                outEdges[((IndexOutIn)indexOutInHash.get(e.getOtherNode(sourceNode))).index] = e;                }            }        return matrix;        }            /** Creates and returns a multigraph adjacency matrix, which includes all edges from a given node to another -- if you know for sure        that you have a simple graph (no multiple edges between two nodes), use getAdjacencyMatrix instead.          If you're doing lots of operations (especially network traversals) which won't effect the topology of the network, an         adjacency matrix structure might be more efficient for you to access rather than lots of calls to getEdgesIn() and         getEdgesOut() etc.  Building the matrix is expensive: it's an O(#edges + #nodes^2) operation.                <p>The adjacency matrix is a two-dimensional array of Edge arrays, both of the dimensions as long as the number of nodes in the graph.        Each entry in this two-dimensional array is an <b>array</b> of all edges FROM a node TO another.  Thus the        returned array structure is organized as Edge[FROM][TO][EDGES].        The FROM and TO indices are ordered in the same order that the corresponding nodes are ordered in the allNodes bag.            <p>Important note: if there are <i>no</i> edges FROM a given node TO another, an empty array is placed in that entry.        For efficiency's sake, the <i>same</i> empty array is used.  Thus you should not assume that you can compare edge arrays        for equality (an unlikely event anyway).                                                  <p>As soon as you modify any part of the Network's topology (through addEdge(), addNode(), removeEdge(),        removeNode(), removeAllNodes(), etc.), the adjacency matrix data is invalid and should not be used.  Instead, request        a new adjacency matrix.                 <p>You can modify the array returned any way you like, though the Edge objects are the actual Edges.    */    public Edge[][][] getMultigraphAdjacencyMatrix()        {        final int n = allNodes.numObjs;        final Edge[][][] matrix = new Edge[n][n][]; //I assume it filled with nulls?        Iterator nodeIO = indexOutInHash.values().iterator();        Bag[] tmp  = new Bag[n];        for(int i=0; i<n;i++)            tmp[i]=new Bag(n);                                while(nodeIO.hasNext()) // this replaces n hash lookups with n class casts            {            IndexOutIn ioi = (IndexOutIn)nodeIO.next();            if(ioi.out==null) continue;            int outDegree = ioi.out.numObjs;            Object sourceNode =  allNodes.objs[ioi.index];            for(int i=0;i<outDegree;i++)                {                Edge e = (Edge)ioi.out.objs[i];                //this is getNodeIndex without the function call                int j = ((IndexOutIn)indexOutInHash.get(e.getOtherNode(sourceNode))).index;                tmp[j].add(e);                }                                           Edge[][] outEdges = matrix[ioi.index];            for(int i=0;i<n;i++)                {                Bag b = tmp[i];                int ne = b.numObjs;                outEdges[i]=new Edge[ne];                if(ne>0)                    {                    System.arraycopy(b.objs,0,outEdges[i], 0, ne );                    b.clear();                    }                }                   }        //now the nodes with 0 out-degree have a row full of nulls in the matrix        for(int i=0;i<n;i++)            {            Edge[][] e2 = matrix[i];            if(e2[0]==null)                for(int j=0;j<n;j++)                    e2[j]=emptyEdgeArray;            }                         return matrix;        }            static Edge[] emptyEdgeArray = new Edge[0];//TODO do I want to use this? (ask liviu too)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人91在线观看| ...av二区三区久久精品| 亚洲图片欧美综合| 色综合天天性综合| 久久精品一区二区三区不卡牛牛| 日韩精品五月天| 欧美日韩久久一区二区| 亚洲一区欧美一区| 一本在线高清不卡dvd| 亚洲视频一区二区在线观看| 99久久免费精品高清特色大片| 久久色中文字幕| 国产乱人伦精品一区二区在线观看| 日韩一区二区三区视频| 狂野欧美性猛交blacked| 精品国产一区二区精华| 国产精品系列在线观看| 欧美国产成人精品| 久久精品国产久精国产| 精品国产乱码久久久久久夜甘婷婷| 麻豆精品视频在线观看免费| 欧美v日韩v国产v| 国产黄色精品视频| 国产精品国产馆在线真实露脸 | 奇米四色…亚洲| 精品污污网站免费看| 亚洲18色成人| 精品国产露脸精彩对白| 蜜桃av一区二区在线观看| 精品欧美乱码久久久久久1区2区| 久久97超碰国产精品超碰| 精品美女一区二区| 国产盗摄一区二区| 国产精品久99| 欧美日韩第一区日日骚| 捆绑调教一区二区三区| 国产蜜臀97一区二区三区| 国产成人av资源| 亚洲欧美另类图片小说| 欧美一区二区三区免费大片| 精品一区二区三区在线播放视频| 日本一区二区三区高清不卡| 在线观看亚洲成人| 亚欧色一区w666天堂| 欧美精品一区二区高清在线观看| 成人国产视频在线观看| 午夜精品成人在线视频| 国产色婷婷亚洲99精品小说| 色呦呦一区二区三区| 天堂av在线一区| 国产精品久久毛片| 91精品国产综合久久国产大片| 国产成人免费视频一区| 亚洲成在人线在线播放| 久久久国产午夜精品| 欧美性色aⅴ视频一区日韩精品| 亚洲国产精品尤物yw在线观看| 欧美日韩国产美女| 不卡一卡二卡三乱码免费网站| 日本大胆欧美人术艺术动态 | 欧美国产一区在线| 欧美另类z0zxhd电影| 男人操女人的视频在线观看欧美| 国产精品理论在线观看| 精品国精品自拍自在线| 欧美日韩精品一区二区在线播放| 国产麻豆精品在线| 日本午夜一区二区| 亚洲伦理在线免费看| 久久久久久久久一| 日韩美女一区二区三区四区| 成人美女视频在线看| 九色综合国产一区二区三区| 亚洲午夜一区二区| √…a在线天堂一区| 国产日韩欧美高清| 欧美精品一区二区三区在线播放| 色综合久久久久| 成人av电影在线网| 国产福利精品一区| 麻豆国产欧美一区二区三区| 午夜a成v人精品| 亚洲精品中文在线观看| 国产精品电影一区二区| 久久一二三国产| 日韩欧美一级精品久久| 欧美一区二区精品| 在线视频国产一区| 国产成人免费视频一区| 国产精品亚洲人在线观看| 久久国产精品99久久人人澡| 日本午夜精品一区二区三区电影| 亚洲va中文字幕| 亚洲成人动漫一区| 香蕉影视欧美成人| 亚洲高清免费观看 | 2023国产一二三区日本精品2022| 欧美色手机在线观看| 日本久久电影网| 91蜜桃传媒精品久久久一区二区| 成人av小说网| 95精品视频在线| 97超碰欧美中文字幕| 国产精品18久久久久久久久久久久| 日韩成人av影视| 免费成人av在线播放| 久久精品二区亚洲w码| 国产呦萝稀缺另类资源| 国产aⅴ综合色| 99久久久无码国产精品| 色综合亚洲欧洲| 欧美日韩免费视频| 欧美一级免费大片| 久久久精品影视| 中文字幕不卡在线观看| 中文字幕一区二区三区在线播放| 依依成人综合视频| 免费欧美日韩国产三级电影| 久久国内精品视频| 成人免费看视频| 高清不卡一二三区| 色天天综合色天天久久| 欧美丰满少妇xxxbbb| 精品国产亚洲在线| 国产精品国产三级国产普通话99| 一区二区三区精品在线| 国产一区二区在线观看免费| 在线日韩av片| 国产农村妇女精品| 麻豆91免费观看| 在线观看免费视频综合| 国产午夜亚洲精品午夜鲁丝片| 一区二区三区国产精华| 国产成人精品免费视频网站| 欧美视频中文字幕| 国产精品免费看片| 国内精品国产成人| 欧美福利一区二区| 亚洲精品乱码久久久久久| 国产精品亚洲一区二区三区妖精 | 欧美一卡二卡在线观看| 亚洲欧洲综合另类| 国产成人高清视频| xfplay精品久久| 五月天精品一区二区三区| 91啦中文在线观看| 国产精品白丝在线| 国产一区二区三区四区在线观看| 正在播放亚洲一区| 亚洲成人福利片| 欧美色男人天堂| 亚洲美女精品一区| 99精品视频在线观看免费| 欧美极品xxx| 国产不卡高清在线观看视频| 欧美成人一区二区三区片免费| 亚洲超碰97人人做人人爱| 色婷婷亚洲婷婷| 一区二区视频在线| 色综合色综合色综合 | 欧美激情一区二区三区不卡| 极品少妇一区二区三区精品视频| 欧美久久久久久久久久| 午夜精品久久一牛影视| 欧美无乱码久久久免费午夜一区| 亚洲日本在线a| 日本乱码高清不卡字幕| 一区二区三区在线观看欧美| 色香蕉久久蜜桃| 亚洲精品国产成人久久av盗摄| 91美女在线观看| 亚洲丝袜另类动漫二区| 色成人在线视频| 亚洲国产精品一区二区尤物区| 欧美日韩一区中文字幕| 午夜不卡av在线| 精品入口麻豆88视频| 国产激情一区二区三区| 中文字幕欧美三区| 91看片淫黄大片一级| 亚洲一本大道在线| 91精品国产综合久久久久久久久久| 日一区二区三区| 337p日本欧洲亚洲大胆精品| 成人永久看片免费视频天堂| 亚洲欧美福利一区二区| 欧美日韩日日摸| 免费高清在线一区| 国产亚洲精品bt天堂精选| 99久久免费精品| 性做久久久久久免费观看欧美| 日韩一区二区影院| 国产成人一级电影| 一区二区三区四区在线免费观看| 欧美久久婷婷综合色| 国产乱理伦片在线观看夜一区| 中文字幕在线一区二区三区| 欧美三级一区二区| 国产呦萝稀缺另类资源| 亚洲欧美日韩国产手机在线|