summary(2)

上周遇到的一些有趣问题:

1. 给定n个任意顺序的实数,它们对应数轴上的n各点,请在O(n)的时间内找到相邻距离最大的两点。

 思路: 如果不考虑复杂度问题,可以先排序,然后遍历一遍就能找到结果;但是因为如果是基于比较的排序的复杂度是O(nlogn),不予考虑,但是似乎可以从计数排序和桶排序等线性时间排序想,首先计数排序解决的问题要能转换成:假设n个输入的每一个元素都是介于0k之间的整数,k是整数。基本思想是对每个输入元素x, 确定出小于x的元素个数,有了这个信息就可以直接将元素定位在最终顺序数组中,所以计数排序可以排除。

 

那么桶排序呢?先来了解一下桶排序的前提条件和要解决的问题:假设输入有一个随机过程产生,该过程将元素均匀而独立地分布在区间[01)之间;桶排序只能是保证当输入符合均匀分布时,即可以以线性期望时间运行。基本思想是:把区间[01)划分成n个大小相同的子区间,或称为桶。然后将n个输入扔到桶中,先对各个桶中的元素排序,然后在收集一遍就得到顺序序列。 但是要想用桶排序来解决这个问题是不行的,因为这n个实数不一定满足均匀分布的特点。 但是其实我们还是可以顺着这个桶的思路走,不是一般性地:我们可以用O(1)时间将这n个数转换成【01】之间的数,我们是要求相邻距离最大的两点,可以把区间均分成n+1个桶,每个子区间的大小是1/(n+1)根据鸽巢原理,n个数放入n+1个桶中,至少有一个桶是空的;所以我们可以获得相邻距离最大值的下界是1/(n+1), 那么最大相邻间距两点出现的距离只可能是跨子区间的两点,如果它们落在同一个区间则距离必然小于1/(n+1); 那么我们可以在o(n)的时间内找出每个子区间的最大值和最小值,然后在计算间隔距离,找到最大的。O(n)时间按复杂度,需要开辟2n的额外空间。

 

2. 关于算法导论第二章《入门》

1. 归并排序中可以对小数组采用插入排序,这样更快。

2. 循环不变式

         用于帮助我们认识和证明算法的正确性。它有三个性质:

初始化:它在循环的第一轮迭代开始之前,应该是正确的

保持:如果在循环的某次迭代开始之前是正确的,那么在下一次迭代开始前也要保持正确

终止:当循环结束的。。。

证明算法的正确性,类似于数学归纳法。

3. 逆序对问题:

插入排序的运行时间和输入数组的逆序对之间的数量关系?

如何在O(NlogN)时间内求出所有逆序对数。 以归并排序为基础。

 

3. 重复子串检测问题(待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python中的pandas库来将这些数据合并成一个DataFrame对象,然后再将DataFrame写入CSV文件中。具体步骤如下: 1. 导入pandas库。 ``` import pandas as pd ``` 2. 读取summary1, summary1_features, target1数据,以同样的方式读取summary2, summary2_features, target2数据。 ``` df1_summary = pd.read_csv('summary1.csv') df1_features = pd.read_csv('summary1_features.csv') df1_target = pd.read_csv('target1.csv') df2_summary = pd.read_csv('summary2.csv') df2_features = pd.read_csv('summary2_features.csv') df2_target = pd.read_csv('target2.csv') ``` 3. 将两个summary数据合并成一个DataFrame对象,使用concat()函数实现,设置axis=0表示按行合并。 ``` df_summary = pd.concat([df1_summary, df2_summary], axis=0, ignore_index=True) ``` 4. 将两个summary_features数据合并成一个DataFrame对象,使用concat()函数实现,设置axis=0表示按行合并。 ``` df_features = pd.concat([df1_features, df2_features], axis=0, ignore_index=True) ``` 5. 将两个target数据合并成一个DataFrame对象,使用concat()函数实现,设置axis=0表示按行合并。 ``` df_target = pd.concat([df1_target, df2_target], axis=0, ignore_index=True) ``` 6. 将三个DataFrame对象按列合并成一个DataFrame对象。 ``` df = pd.concat([df_summary, df_features, df_target], axis=1) ``` 7. 将DataFrame对象写入CSV文件中。 ``` df.to_csv('merged_data.csv', index=False) ``` 完整代码示例: ``` import pandas as pd df1_summary = pd.read_csv('summary1.csv') df1_features = pd.read_csv('summary1_features.csv') df1_target = pd.read_csv('target1.csv') df2_summary = pd.read_csv('summary2.csv') df2_features = pd.read_csv('summary2_features.csv') df2_target = pd.read_csv('target2.csv') df_summary = pd.concat([df1_summary, df2_summary], axis=0, ignore_index=True) df_features = pd.concat([df1_features, df2_features], axis=0, ignore_index=True) df_target = pd.concat([df1_target, df2_target], axis=0, ignore_index=True) df = pd.concat([df_summary, df_features, df_target], axis=1) df.to_csv('merged_data.csv', index=False) ``` 注意:上述代码中假设所有CSV文件中的数据都是按行对齐的,即第i行数据在每个CSV文件中都对应同一个记录。如果数据对齐存在问题,需要先对数据进行清洗和预处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值