作者归档:在线疯狂

RSS feed of 在线疯狂

寻找数组第k大元素的线性时间选择算法

给定一个包含n个元素的数组,怎样从中找出第k大的数。

What is the most efficient algorithm to find the kth smallest element in an array having n elements?

此问题被称为求第k顺序统计量(kth order statistic)。

求解该问题的线性时间算法(既包括确定性算法,也包括非确定性算法)列举如下:

1. Quickselect (快速选择)

2. Median-of-medians (BFPRT) (中位数的中位数)

3. Introselect (内省选择)

4. Unnamed ...

继续阅读

OpenShift - 不只是另一个主机托管平台

我选择PHP,MySQL和WordPress作为我的个人项目平台已经有几年时间了。当你不需要任何别的东西时,事情变得非常简单。只需要建立网站,支付一个主机托管计划,上传文件就大功告成了。即使预算比较紧张也可以找到一些便宜(甚至免费)的网络主机作为起步,在需要时加以扩展。

在我做前端开发的过程中接触过几个不同的技术栈。但无论它是什么——Python,.NET或者别的东西——要使用这些技术做一些严肃的开发还是比较困难的。OK,我已经完成了Codecademy课程,掌握了一些基础知识,现在我想要用Django或者.NET建立我的个人主页。我在哪里可以找到一个价格合理的托管平台?

然后偶然间,我发现了Ghost博客平台,并把我的波兰语 blog搭建在上面。Google了许多Node.js主机,我还不想付钱买一个VPS。最后,我找到了Red Hat(红帽云)的OpenShift。它几乎免费,开源而且强大。简直难以置信。

但很快我发现这并不是一个典型的网络主机。完全理解其工作原理并开始着手有效的使用它需要花费一些时间。但这是值得的。

OpenShift是什么?

大部分关于OpenShift的文字描述提到了术语"PaaS" ...

继续阅读

C++单链表逆置的迭代实现与递归实现

Implement the reversal of a singly linked list iteratively and recursively.

链表逆置既可以用迭代实现也可以使用递归实现。在我看来,迭代法应该比其递归形式的等价实现更加高效,内存开销更小。(试想对一个包含百万个元素的链表执行递归的逆置操作!很快栈空间就会用尽)

递归实现的代码行数更少,但是要想把代码写对会比较困难。另一方面,迭代实现代码行数较多但是比较容易验证。

1) 迭代实现:

void reverse(Node*& head) {
  if (!head) return;
  Node* prev = NULL;
  Node* curr = head;
  while (curr) {
    Node ...

继续阅读