小编mor*_*ort的帖子

Dag的最短路径

我有一个带有s和t顶点的图形,我需要找到它们之间的最短路径.该图有许多我想要利用的特殊属性:

  • 该图是DAG(有向无环图).
  • 我可以在O(| V |)时间内创建拓扑排序,比传统的O(| V + E |)更快.
  • 在拓扑排序中,s是列表中的第一项,t是最后一项.

我被告知,一旦我有一个拓扑排序的顶点,我可以找到比我目前Dijkstra的统一成本标准更快的最短路径,但我似乎无法找到它的算法.

伪代码将非常感激.

编辑:从s到t的所有路径都具有相同的边数.边缘有重量.我正在寻找成本最低的路径.

algorithm graph shortest-path directed-acyclic-graphs

4
推荐指数
1
解决办法
1万
查看次数

如何测试我的haskell功能

我刚开始使用Haskell并尝试先编写一些测试.基本上,我想定义一些函数,而不是调用此函数来检查行为.

add :: Integer -> Integer -> Integer
add a b = a+b

-- Test my function 
add 2 3
Run Code Online (Sandbox Code Playgroud)

如果我在Hugs98中加载那个小脚本,我会收到以下错误:

Syntax error in declaration (unexpected `}', possibly due to bad layout)
Run Code Online (Sandbox Code Playgroud)

如果我删除最后一行,加载脚本然后在拥抱解释器中输入"add 2 3",它就可以了.

所以问题是:如何将函数调用放在与函数定义相同的脚本中?我只是想加载脚本,并能够检查它是否符合我的预期......我不想一直手动输入它们.

haskell hugs

4
推荐指数
3
解决办法
2743
查看次数

OpenMP get_num_threads for parallel for

找到将用于omp的线程数的最佳方法是parallel for什么?我想为所有线程分配足够的内存,但是omp_get_num_threads在我进入并行部分之前无法使用.例如:

int thread_count = ?
float *data = (float*)malloc(thread_count * data_count * sizeof(float));

#pragma omp parallel for default(shared) private(x)
for (x=0; x<N; x++)
{
    int threadid = omp_get_thread_num();
    //... do stuff with data
}

free(data);
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么,以便我可以知道将使用多少线程并相应地进行分配?谢谢

c multithreading openmp

4
推荐指数
1
解决办法
1567
查看次数

LinkedList 在节点后插入

我一直在尝试使用 Java 在当前节点之后将节点插入到链表中。我已经能够在当前节点之前插入,但我无法让它工作:

这是 的代码insertNodeBefore。我只想知道是否有办法调整它以便能够在当前节点之后插入?

// Insert new node nVal to the list before current node curVal 
public void insertNodeBefore(E nVal, E curVal) {
    Node<E> newNode = new Node<E>(nVal);

    Node<E> curr = head;
    Node<E> prev = null;

    if (head.getNodeValue() == curVal) {
        newNode.setNext(head);
        head = newNode;
        return;
    }

    // scan until locate node or come to end of list
    while (curr != null) {
        // have a match 
        if (curr.getNodeValue() == curVal) {
            // insert node
            newNode.setNext(curr);
            prev.setNext(newNode); …
Run Code Online (Sandbox Code Playgroud)

java algorithm linked-list

4
推荐指数
1
解决办法
4491
查看次数

断点如何在嵌入式设备上运行?

这只是个人兴趣的问题.我知道我的JTAG能够读取uController的寄存器值.但我不知道JTAG设备如何知道何时停止uController.我认为可能会添加一些代码来调用中断,但是你可以在操作期间添加断点,因此这种接缝是错误的.那怎么办?

c embedded debugging bare-metal jtag

4
推荐指数
1
解决办法
408
查看次数

为什么这个算法是O(nlogn)?

我正在读一本关于算法分析的书,并且已经找到了一种我不知道如何获得时间复杂度的算法,尽管该书说它是O(nlogn).

这是算法:

sum1=0; 
for(k=1; k<=n; k*=2) 
  for(j=1; j<=n; j++) 
    sum1++;
Run Code Online (Sandbox Code Playgroud)

algorithm big-o time-complexity

4
推荐指数
2
解决办法
1165
查看次数

Haskell:显示函数行与unlines完全相反

我必须找到一些例子,表明内置的Haskell函数"unlines"不是"行"的完全相反,即,

unlines.lines x != x
Run Code Online (Sandbox Code Playgroud)

其中x是包含换行符的String.我找到了一个例子:

"aa\nbb"
Run Code Online (Sandbox Code Playgroud)

会变成

"aa\nbb\n"
Run Code Online (Sandbox Code Playgroud)

有没有人知道任何其他的例子,没有显示相同的缺陷(即,unlines总是在最后一行后添加换行符)?

澄清:根据自动化测试,我已经解决了任务 - 我只是使用了上述三次.如果有任何其他根本不同的解决方案,我只是感兴趣.

haskell

3
推荐指数
1
解决办法
743
查看次数

如何在Windows控制台应用程序中更改文本或背景颜色

哪个C++函数改变文本或背景颜色(MS Visual studio)?例如,cout<<"This text";如何使"此文本"为红色.

c++ text background-color

3
推荐指数
2
解决办法
3万
查看次数

我怎样才能避免重复相似的表达?

我有一个函数,它将二叉树减少为给定顺序的节点值列表(中缀,前缀,后缀和反向中缀,前缀,后缀).下面的代码有效,但我想知道是否有办法在不重复函数实现的情况下执行6次,只需要不同的参数顺序:

data DOrd  = Infix | Praefix | Postfix | GInfix | GPraefix | GPostfix
data BTree =    Nil | BNode Int BTree BTree deriving (Eq,Ord,Show)

flatten :: BTree -> DOrd -> [Int]
flatten Nil             _       = []
flatten (BNode n b1 b2) Infix   = flatten b1 Infix ++ [n] ++ flatten b2 Infix
flatten (BNode n b1 b2) Praefix = [n] ++ flatten b1 Praefix ++ flatten b2 Praefix
---6 times basically the same for all the elements in …
Run Code Online (Sandbox Code Playgroud)

haskell

3
推荐指数
2
解决办法
153
查看次数

C++继承和受保护的基类成员的访问:这样做Java风格是个坏主意吗?

不幸的是,我主要在Java的背景下研究了类设计和设计模式; 因此,我有时很难将熟悉的模式转换为C++.

假设我们想要一个基类,其功能由子类扩展.在Java中,我们会这样做:

public class BaseClass<T> {
     //T is used here
     protected int foo = 0;         
}

public class DerivedClass<T> extends BaseClass<T> {
    public void incr_foo() {
         ++foo;
    }
}
Run Code Online (Sandbox Code Playgroud)

我直接翻译成C++:

template<class T>
class BaseClass {
protected:
    size_t foo = 0;
     //T is used here
};

template<class T>
class DerivedClass : public BaseClass<T> {
public:
     void incr_foo() {
          ++(this->foo);
     }
};
Run Code Online (Sandbox Code Playgroud)

由于'protected'的C++语义来自Java语义,我们需要使用类似'this-> foo'的东西来访问基类的受保护成员.

编辑:如果我们只使用'++ foo',编译器会给出错误:'使用未声明的标识符foo'.

EditEnd

如果您需要访问基类的几个成员,这可能会有点乏味,并且不太好阅读.

这是一个很好的设计决定吗?如果没有,有什么更好的方法来实现这一目标?

c++ inheritance protected

3
推荐指数
2
解决办法
834
查看次数