任务说明
实验算法
空间数据索引RTree(R树)完全解析及Java实现 - 佳佳牛 - 博客园 (cnblogs.com)
SFS
-
打开堆文件 t相当于一个指针 当指针指到不为空的时候 如果窗口未被占用那么 如果窗口是满的话那么代表完成 如果窗口没有满的话 把他加到窗口上,并执行如下的操作 打开一个新的文件并把它写入新的文件 如果下一个文件不是空的话 那么就写入一个新的文件 直到新文件的窗口满了
-
把堆文件释放 关闭 并把新的窗口覆盖掉原来的窗口
-
清空窗口
算法图解
将海量数据以堆文件的形式输入(input) 注意 这里的堆和我们的数据结构的堆不是很一样 这个堆的特点是后边的元素不会对前面的元素产生支配关系,window可以认为是内存人为指定的一个空间,输入之前先判断数据是不是满了 如果满了将后方的所有文件输入到一个新堆secondpass中 输出window并且把如果数据没有被支配那么输入到window中
BBS
将S置为空 将D所有的入口全都插入堆, 将最大/最小元素移动 如果被某些节点占用 那么将节点移动如果节点没有被占用如果他是一个立即入口那么 对于每一个孩子节点 如果没有被占用将他插入 如果是一个数据节点并且被占用也插入。
生成数据集
查看帮助
cat INSTALL
基本安装
==================
简单地说,shell命令`/配置;制作进行安装
配置、生成和安装此程序包。以下更详细的说明是通用的;有关此软件包的特定说明,请参阅“自述”文件。
“configure”shell脚本试图猜测编译过程中使用的各种系统相关变量的正确值。它使用这些值在包的每个目录中创建一个“Makefile”。它还可以创建一个或多个包含系统相关定义的“.h”文件。最后,它创建了一个shell脚本“config.status”,您可以在将来运行该脚本来重新创建当前配置,以及一个包含编译器输出的文件“config.log”(主要用于调试“configure”)。
它还可以使用一个可选文件(通常称为“config.cache”,并使用“--cache file=config.cache”或简单的“-C”启用)来保存测试结果,以加快重新配置。默认情况下会禁用缓存,以防止意外使用过时的缓存文件时出现问题。
如果您需要做一些不寻常的事情来编译包,请尝试弄清楚“configure”如何检查是否要这样做,并将差异或说明邮寄到“README”中给出的地址,以便在下一个版本中考虑它们。如果您正在使用缓存,并且在某个时刻“config.cache”包含您不想保留的结果,则可以删除或编辑它。
文件“configure.ac”(或“configure.in”)用于由名为“autoconf”的程序创建“configure”。如果要更改“configure.ac”或使用较新版本的“autoconf”重新生成“configure”,则需要使用“configure.ac”。
编译此包的最简单方法是:
1.“cd”到包含包的源代码和类型的目录
`/configure’为您的系统配置程序包。
运行“configure”可能需要一段时间。跑步时,它会打印
一些消息告诉它正在检查哪些功能。
2.键入“make”以编译包。
3.(可选)键入“make-check”以运行附带的任何自检
包裹。
4.键入“make-install”以安装程序和任何数据文件,以及
文档
5.您可以从
通过键入“makeclean”来选择源代码目录。还要删除
创建了“configure”的文件(这样您就可以为
另一种计算机),键入“makedistclean”。有
也是一个“让维护者干净”的目标,但这主要是为了
为软件包的开发人员。如果你使用它,你可能需要
各种其他程序,以便重新生成附带的文件
随着分布。
6.通常,您也可以键入“make-uninstall”来删除已安装的
文件。
编译器和选项
=====================
有些系统需要特殊的选项来编译或链接
`configure”脚本不知道。运行`/为配置--help'
一些相关环境变量的详细信息。
您可以为配置参数提供“configure”初始值
通过在命令行或环境中设置变量。在这里
是一个例子:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*注意定义变量::,了解更多详细信息。
为多种体系结构编译
====================================
./configure
make
make install
如果权限不够加上sudo试试
权限不够 sudo来凑 正常的情况如下图所示
调整窗口大小 进入src文件夹
运行./randataset
如果不好使的话
>>表示写追加写入 >表示写覆盖
接下来 安心写代码
BBS算法
支配部分
def checkDomination(a, b, col_num)->int:
above = 0
equal = 0
below = 0
for i in range(col_num):
if a[i] == b[i]:
equal += 1
elif a[i] < b[i]:
below += 1
else:
above += 1
if above >= 1 and above + equal == col_num:
return 1
elif below >= 1 and below + equal == col_num:
return -1
else:
return 0
测试时间原理
这个测试就是说要找到一个没有依赖关系的集合,当集合输入满的时候就输出这个window本题,想要证明输出查找的时间和正相关或者负相关有关也和数据集合的大小有关
完整代码
import pandas as pd
import time
def checkDomination(a, b, col_num)->int:
above = 0
equal = 0
below = 0
for i in range(col_num):
if a[i] == b[i]:
equal += 1
elif a[i] < b[i]:
below += 1
else:
above += 1
if above >= 1 and above + equal == col_num:
return 1
elif below >= 1 and below + equal == col_num:
return -1
else:
return 0
def bnl(data: pd.DataFrame) -> pd.DataFrame:
mWindow = []
##生成一个空的二维表
rows = data
rowNum = data.shape[1]
colNum = data.shape[0]
for i in range(rowNum): ##得到数组第i行数据
currentRow = rows[i]
if len(mWindow) == 0: ## 如果windows是空 则返回
mWindow.append(currentRow)
continue
continueFlag = False
for windowitem in mWindow:
domination_flag = checkDomination(currentRow, windowitem, colNum)
## 如果当前行被某个窗口元素支配,那么当前行一定不在窗口里,跳过
if (domination_flag == -1):
continueFlag = True
break;
## 如果某个窗口元素被当前行支配,那么从窗口中删除该被支配的元素,随后势必会将当前行加入窗口(如若不然窗口中必定存在两个元素,其中一个支配另一个)
elif(domination_flag == 1):
mWindow.remove(windowitem)
if not continueFlag:
mWindow.append(currentRow)
return mWindow
def sfs(data: pd.DataFrame) -> pd.DataFrame:
...
dates = pd.read_csv('10K_independent.txt',header=None) # 获取数据
start = time.time()
tyc = bnl(dates)
end = time.time()
print('run time: %s second\n'%(end-start))
实验 - 飞书云文档 (feishu.cn)