小编Mic*_*ael的帖子

HashMap得到/放置复杂性

我们习惯说HashMap get/put操作是O(1).但是它取决于哈希实现.默认对象哈希实际上是JVM堆中的内部地址.我们是否确定声称get/putO(1)是否足够好?

可用内存是另一个问题.据我所知,从javadocs,HashMap load factor应该是0.75.如果我们在JVM中没有足够的内存且load factor超出限制怎么办?

所以,看起来O(1)似乎不能保证.它有意义还是我错过了什么?

java complexity-theory hashmap data-structures

117
推荐指数
5
解决办法
13万
查看次数

了解为什么Zipper是Comonad

这是对我上一个问题的答案的后续跟进.

假设我需要映射每个项目a:AList[A]b:B使用功能def f(a:A, leftNeighbors:List[A]): B和产生List[B].

显然,我不能只是map在列表上调用,但我可以使用列表拉链.拉链是一个在列表中移动的光标.它提供对当前element(focus)及其邻居的访问.

现在我可以替换我fdef f'(z:Zipper[A]):B = f(z.focus, z.left)并将这个新函数传递f'cobind方法Zipper[A].

这样的cobind工作:它f'用拉链调用,然后移动拉链,f'新的 "移动"拉链调用,再次移动拉链等等......直到拉链到达列表的末尾.

最后,cobind返回一个新的拉链类型Zipper[B],可以将其转换为列表,从而解决问题.

现在请注意之间的对称性cobind[A](f:Zipper[A] => B):Zipper[B]bind[A](f:A => List[B]):List[B]这就是为什么ListMonadZipperComonad.

是否有意义 ?

functional-programming scala zipper comonad

112
推荐指数
1
解决办法
2687
查看次数

如何用sed替换整线?

假设我有一个带行的文件

aaa=bbb

现在我想用以下代替它们:

aaa=xxx

我可以这样做:

sed "s/aaa=bbb/aaa=xxx/g"

现在我有一个包含几行的文件,如下所示:

aaa=bbb
aaa=ccc
aaa=ddd
aaa=[something else]

我怎么能代替所有该行aaa=[something]aaa=xxx使用sed的

regex sed

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

命令行中的处理器/核心数

我正在运行以下命令来获取Linux中的处理器/核心数量:

cat /proc/cpuinfo | grep processor | wc -l
Run Code Online (Sandbox Code Playgroud)

它有效,但看起来并不优雅.你会怎么建议改进它?

linux bash command-line

106
推荐指数
7
解决办法
10万
查看次数

如何在两个排序数组的并集中找到第k个最小元素?

这是一个家庭作业问题.他们说,这需要O(logN + logM)地方NM是数组的长度.

让我们命名的数组ab.显然我们可以忽略所有a[i]b[i]i> k.
首先,让我们来比较一下a[k/2]b[k/2].让b[k/2]> a[k/2].因此我们也可以丢弃所有b[i],其中i> k/2.

现在我们拥有所有a[i],我<k和所有b[i],其中我<k/2找到答案.

你下一步怎么做?

arrays algorithm binary-search

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

如何在命令行中合并图像?

我想尝试使用CSS Sprite技术将一些缩略图作为单个图像加载.所以我需要在服务器中离线单个文件中"合并"一些缩略图.

假设我有10个相同大小的缩略图.您如何建议我从Linux命令行"合并"它们?

linux command-line image-processing

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

如何等待几个期货

假设我有几个期货,需要等到其中任何一个失败全部成功.

例如:我们有3个期货:f1,f2,f3.

  • 如果f1成功并f2失败,我不等待f3(并将失败返回给客户端).

  • 如果f2失败f1而且f3仍然在运行,我不等待它们(并返回失败)

  • 如果f1成功然后f2成功我会继续等待f3.

你会如何实现它?

concurrency scala future

83
推荐指数
7
解决办法
6万
查看次数

如何在Windows中暂停/恢复进程?

在Unix中,我们可以临时暂停进程执行并使用信号SIGSTOP和恢复它SIGCONT.如何在没有编程的情况下暂停Windows中的单线程进程?

windows signals process

70
推荐指数
6
解决办法
10万
查看次数

为什么背包问题是伪多项式?

我知道这Knapsack是NP完全的,而DP可以解决.他们说DP解决方案是pseudo-polynomial,因为它在"输入长度"(即编码输入所需的位数)中是指数的.不幸的是我没有得到它.有人能pseudo-polynomial慢慢向我解释那件事吗?

language-agnostic complexity-theory knapsack-problem dynamic-programming

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

何时以及为什么要在Scala中使用Applicative Functors

我知道Monad可以在Scala中表达如下:

trait Monad[F[_]] {
  def flatMap[A, B](f: A => F[B]): F[A] => F[B]
}
Run Code Online (Sandbox Code Playgroud)

我明白为什么它有用.例如,给定两个功能:

getUserById(userId: Int): Option[User] = ...
getPhone(user: User): Option[Phone] = ...
Run Code Online (Sandbox Code Playgroud)

我可以轻松编写函数,getPhoneByUserId(userId: Int)因为它Option是一个monad:

def getPhoneByUserId(userId: Int): Option[Phone] = 
  getUserById(userId).flatMap(user => getPhone(user))
Run Code Online (Sandbox Code Playgroud)

...

现在我Applicative Functor在Scala中看到:

trait Applicative[F[_]] {
  def apply[A, B](f: F[A => B]): F[A] => F[B]
}
Run Code Online (Sandbox Code Playgroud)

我想知道何时应该使用它而不是 monad.我猜选项和列表都是Applicatives.你能给出使用applyOption和List的简单例子,并解释为什么我应该使用它而不是 flatMap

functional-programming scala applicative

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