小编Kir*_*ira的帖子

OCaml类型推理算法如何工作?

我正在学习OCaml,我很好奇OCaml如何进行类型推理.我知道这是通过一个叫做统一的过程来完成的,我试着在已发表的论文中阅读有关算法的内容,但这个符号让我失望了.任何人都可以为我描述一步一步的过程吗?

ocaml types functional-programming

11
推荐指数
2
解决办法
1648
查看次数

对每行一个字符串的20GB文件进行排序

在Gayle Laakman的书Cracking the Technical Interview的第11.5节中,

"想象一下,你有一个20GB的文件,每行一个字符串.解释你如何对文件进行排序"

我最初的反应正是她提出的解决方案 - 通过读取X mb的数据,对文件进行排序,然后将其写入磁盘,将文件拆分为更小的块(兆字节).最后,合并文件.

我决定不采用这种方法,因为最终合并将涉及保留主存中的所有数据 - 我们假设这是不可能的.如果是这样的话,这个解决方案究竟是如何实现的?

我的另一种方法是基于这样的假设:我们拥有接近无限的磁盘空间,或者至少足以容纳我们已有数据的2倍.我们可以读入X mb的数据,然后为它们生成散列键 - 每个键对应一个文件中的一行.我们将继续这样做,直到所有值都经过哈希处理.然后我们只需要将该文件的值写入原始文件.

让我知道你的想法.

sorting

6
推荐指数
1
解决办法
1963
查看次数

为什么 C 中的线程函数返回类型需要是 (void*) 类型?

在c中,我们创建一个线程,如下所示:

void * run(void * arg){
    printf("hello world\n");
}

int main(){
    pthread_t thread;
    int a = pthread_create(&thread, NULL, run, (void*)0);
}
Run Code Online (Sandbox Code Playgroud)

但如果我声明运行为,它将不起作用

void run(){}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我将其强制转换(void *)为 的参数pthread_create,则效果很好。因此它只接受返回类型为 的函数(void *)

为什么?

谢谢 !

c multithreading pthreads

5
推荐指数
2
解决办法
4277
查看次数

改进的quicksort可以是O(n)最好的情况吗?

一般认为快速排序的最佳情况是O(nlogn),因为阵列每次分区大约一半.还有人说最坏的情况是n ^ 2阶,假设数组已经排序.

我们不能通过设置一个名为swap的布尔值来修改quicksort吗?例如,如果第一遍的位置没有初始交换,那么我们可以假设数组已经排序,因此不再对数据进行分区.

我知道修改后的冒泡排序通过检查交换来使用它,允许最好的情况是O(n)而不是O(n ^ 2).这种方法可以应用于快速排序吗?为什么或者为什么不?

java sorting algorithm big-o quicksort

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

Jon Bentleys美丽的快速入门 - 它甚至如何运作?

我认为我对quicksort的工作方式有了很好的理解,直到我在http://code.google.com/edu/algorithms/index.html上观看了视频,其中Jon Bentley介绍了他的"漂亮的快速排序代码",如下所示:

void quicksort(int l, int u){
    int i, m;
    if(l >= u) return;
    m = l;
    for(i = l+1; i<= u; i++)
        if(x[i] < x[l])
            swap(++m, i); //this is where I'm lost. Why the heck does it preincrement?

    swap(l, m);

    quicksort(l, m-1);
    quicksort(m+1, u);

}
Run Code Online (Sandbox Code Playgroud)

算法混淆的算法的另一部分是FOR循环后的最终交换.为什么这是必要的?让我们假设数组已经按顺序排列.如果是这样,则自x [i]> x [l]以来不会发生交换.最后,我们用m交换l.这搞砸了订单.

我错过了什么吗?

谢谢.

algorithm quicksort data-partitioning

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

如何在codeigniter中加载库中的帮助器?

我创建了一个API访问库,我为库使用的常用函数创建了一个单独的帮助器.在codeigniter中,新库可以通过使用...创建自己的实例来访问本机类.

$ example_instance =&get_instance();

我做了这个,加载了我的助手 - 但每次调用辅助函数时,我都会得到"试图访问非对象"错误.我究竟做错了什么?

这就是我所拥有的

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class api_example {
private $api;
public function __construct(){
    $this->api = & get_instance();
    $this->api->load->helper('helper_test');
}   

public function search_recent($param){

    $string = $this->api->helper_test->connect($url); //error!!!

    return $xml;
}


}

/* End of file  */
Run Code Online (Sandbox Code Playgroud)

codeigniter helper

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