我正在学习OCaml,我很好奇OCaml如何进行类型推理.我知道这是通过一个叫做统一的过程来完成的,我试着在已发表的论文中阅读有关算法的内容,但这个符号让我失望了.任何人都可以为我描述一步一步的过程吗?
在Gayle Laakman的书Cracking the Technical Interview的第11.5节中,
"想象一下,你有一个20GB的文件,每行一个字符串.解释你如何对文件进行排序"
我最初的反应正是她提出的解决方案 - 通过读取X mb的数据,对文件进行排序,然后将其写入磁盘,将文件拆分为更小的块(兆字节).最后,合并文件.
我决定不采用这种方法,因为最终合并将涉及保留主存中的所有数据 - 我们假设这是不可能的.如果是这样的话,这个解决方案究竟是如何实现的?
我的另一种方法是基于这样的假设:我们拥有接近无限的磁盘空间,或者至少足以容纳我们已有数据的2倍.我们可以读入X mb的数据,然后为它们生成散列键 - 每个键对应一个文件中的一行.我们将继续这样做,直到所有值都经过哈希处理.然后我们只需要将该文件的值写入原始文件.
让我知道你的想法.
在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 *)。
为什么?
谢谢 !
一般认为快速排序的最佳情况是O(nlogn),因为阵列每次分区大约一半.还有人说最坏的情况是n ^ 2阶,假设数组已经排序.
我们不能通过设置一个名为swap的布尔值来修改quicksort吗?例如,如果第一遍的位置没有初始交换,那么我们可以假设数组已经排序,因此不再对数据进行分区.
我知道修改后的冒泡排序通过检查交换来使用它,允许最好的情况是O(n)而不是O(n ^ 2).这种方法可以应用于快速排序吗?为什么或者为什么不?
我认为我对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.这搞砸了订单.
我错过了什么吗?
谢谢.
我创建了一个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)