给定两个列表A和B,B是A的一个列,B是A的一个列,B是通过随机化A中元素的顺序来生成的。我们想要找到一个指数映射P,从A到B,A映射Pi = j表示A中的ith元素出现在B中的索引j处,这些列表A和B可能包含重复的元素。
例如,给定
A= 12,28,46,32,50 B= 50,12,32,46,28我们应该返回1,4,3,2,0
我的解是O(n^2)
public int[] anagramMappings(int[] A, int[] B) {
int[] result = new int[100];
int count = 0;
for (int i = 0;
全,
我是一个中等水平的python开发人员,拥有Web技术硕士学位,虽然我认为自己是一个不错的程序员,但我总是遇到与算法复杂性相关的问题。
有人推荐一本好书来解释如何导出算法的O符号,以及可以使用哪些复杂算法的常见解决方案?
我目前正在阅读“Bob大叔的”The Clean Coder: A Code of better for Professional Programmers“(顺便说一句,我强烈推荐这本书),他在书中用了一章的篇幅解释了如何每周在工作之外花费20个小时来提高你的技能是成为一名更好的程序员的唯一途径。所以我想我应该从算法复杂性开始,然后转移到大表和闭包。
这个算法的时间和空间复杂度是多少?
我计算WC的时间复杂度如下:
所有初始化为O(1)每个循环为O(N),因为
- outer for loop to run max of n times,
- initiations to be cost of 1 each,
- inner for loop to run max of 17 times, and
- the if statements and assignments to be cost of 1 each.
- I calculate O((n+1+1)\*(17+1+1+1+1+1+1+1+1+1+1+1+1) then ig
问题的说明如下。
一个程序会逐行读取一个文件来建立一个图表。文件中的每一行将是以下三种操作之一:
add x y,这意味着在节点x和y之间添加一个边,这样就形成了一个图。这个图是一个无向图。
remove x y,这意味着删除节点x和y之间的边,如果它无效(x或y在图中不存在,或者x和y之间不存在边),那么什么也不做。
is linked x y,如果x和y可以通过图中的所有边连接,它应该返回。此操作的时间复杂性应该是恒定时间。
下面是一个示例:
add 1 2
add 2 3
is linked 1 3(should be true ,cause t
我正在学习数据结构和运行时间计算。对于增加数组大小的运行时间计算,我遇到了一个问题。
1)如果我们用常数来增加数组的大小。
N=4 will be N0
N=8 will be N0+c
N=12 will be N0+2c
.
.
No+kc
N=N0 +kc
N=N0+kc
k=(N−N0 )/c
k=(N−N0)/c
Running time= N0 k+c(1+2+,...,k)
N0 k+c(1+2+,...,k)
N0 k+ck(k+1)/2 which is equal to O(N2)
任何人请帮助我理解运行时间的最终计算。
我正在使用OpenMP来实现并行版本的Dijkstra算法。我的代码由两部分组成。第一部分只由一个线程(master)执行。此线程从列表中选择新节点。第二部分由其他线程执行。这些线程改变从源到其他节点的距离。不幸的是,在我的代码中是错误的,因为执行第二部分的许多线程中的一个突然“消失”。可能数据同步有问题,但我不知道在哪里。如果有人能告诉我我的错误在哪里,我将不胜感激。代码如下:
map<int, int> C;
map<int, int> S;
map<int, int> D;
int init;
int nu;
int u;
int p = 3;//om
我很难理解dijkstra算法的时间。下面,我将分析数组的伪代码放在下面。考虑V是顶点,E是边。Q作为一个数组,其初始化时间为O(V),最小值和内边值为O(V)倍O(V + E),结果是O(V 2),对吗?
1 function Dijkstra(Graph, source):
2 dist[source] ← 0 // Initialization
3
4 create vertex set Q
5
6 for each vertex v in Gr
import java.util.*;
public class BFS {
static LinkedList<Node> tracker = new LinkedList<>();
static Node[] nodes = new Node[]{
new Node(1),
new Node(2),
new Node(3),
new Node(4),
new Node(5),
new Node(6),
我在寻找快速循环的方法,然后我发现了对列表的理解。
我自己试过了,但我还没有完全理解。
根据我对列表理解的研究,我想要执行的代码在左边,然后是条件,然后是for循环。
基本上是这样的。
["Something I'd like to execute" Some conditions for loop]
Following this style, I did it like this.
我试图将代码转化为一行代码:
graph = []
for g in range(M):
satisfy = []
graph_count = 0
for i i