我们习惯说HashMap get/put操作是O(1).但是它取决于哈希实现.默认对象哈希实际上是JVM堆中的内部地址.我们是否确定声称get/putO(1)是否足够好?
可用内存是另一个问题.据我所知,从javadocs,HashMap load factor应该是0.75.如果我们在JVM中没有足够的内存且load factor超出限制怎么办?
所以,看起来O(1)似乎不能保证.它有意义还是我错过了什么?
这是对我上一个问题的答案的后续跟进.
假设我需要映射每个项目a:A的List[A]来b:B使用功能def f(a:A, leftNeighbors:List[A]): B和产生List[B].
显然,我不能只是map在列表上调用,但我可以使用列表拉链.拉链是一个在列表中移动的光标.它提供对当前element(focus)及其邻居的访问.
现在我可以替换我f的 def 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]这就是为什么List是Monad和Zipper是Comonad.
是否有意义 ?
假设我有一个带行的文件
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的?
我正在运行以下命令来获取Linux中的处理器/核心数量:
cat /proc/cpuinfo | grep processor | wc -l
Run Code Online (Sandbox Code Playgroud)
它有效,但看起来并不优雅.你会怎么建议改进它?
这是一个家庭作业问题.他们说,这需要O(logN + logM)地方N和M是数组的长度.
让我们命名的数组a和b.显然我们可以忽略所有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找到答案.
你下一步怎么做?
我想尝试使用CSS Sprite技术将一些缩略图作为单个图像加载.所以我需要在服务器中离线单个文件中"合并"一些缩略图.
假设我有10个相同大小的缩略图.您如何建议我从Linux命令行"合并"它们?
假设我有几个期货,需要等到其中任何一个失败或全部成功.
例如:我们有3个期货:f1,f2,f3.
如果f1成功并f2失败,我不等待f3(并将失败返回给客户端).
如果f2失败f1而且f3仍然在运行,我不等待它们(并返回失败)
如果f1成功然后f2成功我会继续等待f3.
你会如何实现它?
在Unix中,我们可以临时暂停进程执行并使用信号SIGSTOP和恢复它SIGCONT.如何在没有编程的情况下暂停Windows中的单线程进程?
我知道这Knapsack是NP完全的,而DP可以解决.他们说DP解决方案是pseudo-polynomial,因为它在"输入长度"(即编码输入所需的位数)中是指数的.不幸的是我没有得到它.有人能pseudo-polynomial慢慢向我解释那件事吗?
language-agnostic complexity-theory knapsack-problem dynamic-programming
我知道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?