给定一个二维数组int t[m][n],其中m和n千万级别,且t中没有任何的规律(如有序等)。有什么好的办法,在不用多线程等技术的前提下高效的实现?
解决方案:2分
用文件当数组使用吧
解决方案:5分
没有规律,你还是要遍历一遍的。
解决方案:2分
英雄所见略同!
解决方案:10分
// 创建文件句柄 HANDLE hFile = ::CreateFile(lpszFileName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // 创建文件映射 HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READONLY | SEC_COMMIT, NULL, NULL, NULL); // 读取映射中的内存 LPVOID lpBuffer = ::MapViewOfFile(hMap, FILE_MAP_READ, NULL, NULL, NULL); // 好了文件的内存已经获取了,你可以随意处理了 // 释放映射内存 ::UnmapViewOfFile(lpBuffer); // 关闭文件映射 ::CloseHandle(hMap); // close file handle ::CloseHandle(hFile);
Linux下参考
void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);
解决方案:21分
int t[m][n]可以有那么大?m和n都千万级别,不说栈暴了,堆都暴了
假如要想查找快,你放数据就应该用关联式容器(如哈希表等储存),否则你查找时只能逐个遍历
假如要想查找快,你放数据就应该用关联式容器(如哈希表等储存),否则你查找时只能逐个遍历