使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。

使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。(考察高效率,解决产生冲突的问题)

代码虽然实现了。
提高效率的地方有如下:
1.初始化set集合的时候 Sets.newHashSetWithExpectedSize(value),
给初始化带个固定大小,减少了集合在扩容的时候,值重新复制的问题。这的效率稍有提高。
2.Random random = new Random();放在循环之外。


具体代码如下:

    /**
     * 使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。
     * (考察高效率,解决产生冲突的问题)
     */
    private static void testRandom() {
        int value = 10000000;
        //int类型最大值:2的32次方 - 1 = Integer.MAX_VALUE = 2147483647,二十亿多,真够啦 。
        Set<Integer> result = Sets.newHashSetWithExpectedSize(value);
        Random random = new Random();
        long a = System.currentTimeMillis();
        while (result.size() < value + 1) {
            int i = random.nextInt(value + 1);
            result.add(i);
        }
        System.out.println("\r<br> 执行耗时 : " + (System.currentTimeMillis() - a) / 1000f + " 秒 ");
        System.out.println("完了,集合大小为" + result.size());
    }

具体代码执行结果,如下图:



因为一千万个都打印 出来,不合适;就打印个集合大小就可以了吧。再打印个执行时间。

但是效率好像并没有提升太多。
但是怎么在,产生随机数的时候,修改,使得效率,再次提高。即产生过的数就不再被随机到。
这个我就不知道啦,估计得研究下Random这个类的所有方法才可以吧。
待以后更新。


(当然集合里面多随机生产了个0,再添加一行代码:result.remove(0);就可以把多余的0给去掉,然后就是正确的结果了。)



### 回答1: 生成随机图可以用 Python 的 NetworkX 库实现。最短路径算法可以使用 Dijkstra 算法或 Floyd-Warshall 算法使用 NetworkX 生成随机图示例: ```python import networkx as nx G = nx.gnm_random_graph(10, 20) ``` 使用 Dijkstra 算法寻找最短路径示例: ```python import networkx as nx G = nx.gnm_random_graph(10, 20) shortest_path = nx.dijkstra_path(G, 0, 9) ``` 使用 Floyd-Warshall 算法寻找最短路径示例: ```python import networkx as nx G = nx.gnm_random_graph(10, 20) shortest_path = nx.floyd_warshall(G)[0][2] ``` 注意,上面的代码仅供参考,需要根据实际情况修改。 ### 回答2: 随机生成一个图可以使用随机生成器来产生图的顶点和边。假设我们生成一个无向图,可以按照以下步骤来生成: 1. 随机确定图的顶点量n。 2. 创建一个n x n的邻接矩阵,初始值均为0。 3. 对于每一对不同的顶点i和j,以一定的概率p生成一条连接i和j的边。可以使用一个随机生成器根据概率p来决定是否生成边。 4. 如果生成的边不是无向图中允许的边,则将邻接矩阵中对应的位置设为1,表示有边连接两个顶点。 有了随机生成的图,我们可以使用最短路径算法来寻找两个顶点之间的最短路径。这里以Dijkstra算法为例: 1. 创建一个集合visited来记录已经找到最短路径的顶点,并初始化为空集。 2. 创建一个距离组distance来记录起始顶点到其他顶点的最短路径长度,并初始化为无穷大。 3. 设置起始顶点的距离为0,并将其添加到visited集合中。 4. 对于起始顶点的邻居顶点,更新其距离组中的距离:如果经过当前顶点到达邻居顶点的路径长度小于distance组中的距离,则更新distance组中的距离。 5. 从未访问过的顶点中选择一个距离最短的顶点作为下一个访问的顶点,并将其添加到visited集合中。 6. 重复步骤4和步骤5,直到找到目标顶点或者所有顶点都被访问过。 7. 返回起始顶点到目标顶点的最短路径长度。 以上就是一种可能的随机生成图和最短路径算法的实现方式。具体实现细节还需要根据程序的编写环境和实际需求来确定。 ### 回答3: 最短路径算法(例如Dijkstra算法)可以用于寻找给定图中两个节点之间的最短路径。为了回答这个问题,我将使用一个随机生成的无向连通图作为示例,并使用Dijkstra算法寻找最短路径。 假设我们的随机图由节点集合V和边集合E组成,其中V包含n个节点v1, v2, ..., vn,E包含m条边e1, e2, ..., em。每条边e连接两个节点(ei, ej),并且具有一个随机的非负权值w(ei, ej)。 首先,我们需要创建一个邻接矩阵adj_matrix,用于表示节点之间的边和权值。我们可以将矩阵的每个元素初始化为无穷大,表示两个节点之间没有直接连接的边。然后,对于每条边(ei, ej),我们将权值w(ei, ej)赋值给adj_matrix[ei][ej]和adj_matrix[ej][ei]。 接下来,我们定义源节点s和目标节点t并初始化一个distance列表,其中distance[i]表示从源节点s到节点i的最短路径长度。我们将distance[s]初始化为0,其他元素初始化为无穷大。 然后,我们使用Dijkstra算法来计算最短路径。算法的大致步骤如下: 1. 创建一个空的集合visited,并将源节点s加入visited。 2. 遍历节点集合V,对于每个节点v: a. 如果v不在visited中,且distance[s]+adj_matrix[s][v] < distance[v],则更新distance[v]为distance[s]+adj_matrix[s][v]。 3. 在未访问的节点中选择distance最小的节点,将其加入visited。 4. 重复步骤2和步骤3,直到目标节点t加入visited。 5. 最短路径长度即为distance[t]。 最后,我们可以回答问题并输出最短路径。我们可以从目标节点t开始,并通过查找distance列表来确定最短路径上的节点。我们可以使用一个predecessor列表来记录每个节点在最短路径上的前一个节点。 这就是一个寻找最短路径的简单示例。在实际应用中,可能需要考虑更复杂的情况和优化算法
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值