模糊排序问题(Fuzzy sort)

对区间的模糊排序 7-6 对区间的模糊排序    考虑这样的一种排序问题,即无法准确地知道待排序的各个数字到底是多少。对于其中的每个数字,我们只知道它落在实轴上的某个区间。亦即,给定的是n个形如[ai,bi]的闭区间,其中ai≤bi。算法的目标是对这些区间进行模糊排序(fuzzy-sort),亦即,产生的各区间的一个排列,使得存在一个cj∈[ai, bi],满足c1≤c2≤...≤cn。a)为n个区间的模糊排序设计一个算法。你的算法应该具有算法的一般结构,它可以快速排序左部端点(即各ai),也要能充分利用重叠区间来改善运行时 阅读详情

算法导论第2版的7-6,首先理解题目就花了n久,从网上找了些思路,下面具体来说

题目内容:

考虑这样的一种排序问题,即无法准确地知道待排序的各个数字到底是多少。对于其中的每个数字,我们只知道它落在实轴上的某个区间内。亦即,给定的是n个形如[ai, bi]的闭区间,其中ai<= bi。算法的目标是对这些区间进行模糊排序(fuzzy-sort),亦即,产生各区间的一个排列<i1, i2, ..., in>,使得存在一个cj属于区间[aij, bij],满足c1 <= c2 <= ... <= cn。
a) 为n个区间的模糊排序设计一个算法。你的算法应该具有算法的一般结构,它可以快速排序左部端点(即各ai),也要能充分利用重叠区间来改善运行时间。(随着各区间重叠得越来越多,对各区间进行模糊排序的问题会变得越来越容易。你的算法应能充分利用这种重叠。)

b) 证明:在一般情况下,你的算法的期望运行时间为Θ(nlgn),但当所有的区间都重叠时,期望的运行时间为Θ(n)(亦即,当存在一个值x,使得对所有的i,都有x∈[ai, bi])。你的算法不应显式地检查这种情况,而是应随着重叠量的增加,性能自然地有所改善。

算法思路:这是对一组给定的区间序列来模糊排序,可以利用快速排序的思想,对区间序列进行划分。但此时的主元区间元素是一个区间元素集合中所有区间元素的公共区间(交集),即是说该集合中的所有区间元素都是“相等的”或者说“任意序都是有序的”。初始时,算法任选一个区间元素作为主元(同快速排序的哨兵元素)。如果某个区间元素严格小于主元,则将其放到序列左边;如果其严格大于主元,则将其放到序列右边;否则,说明该区间元素与主元相交,则更新主元区间大小为该相交的区间部分,该区间元素放置在整个序列的中间部分(对这部分区间序列可以不作严格排序,因为只需要满足<存在一个cj..>),然后递归的处理左边和右边区间序列即可

算法描述:

private static int[] patition(Interval[] Int, int p, int r)
{
      Interval pivot = new Interval(Int[r].begin,Int[r].end);
      int i = p;
      int j = p;
     int k = r;
      while (j < k)
      {
           if (Int[j].end <= pivot.begin)
          {
           Interval temp0 = Int[i];
            Int[i] = Int[j];
           Int[j] = temp0;
            i++;
           j++;
           }
         else if (Int[j].begin >=pivot.end)
        {
          Interval temp1 = Int[k];
            Int[k] = Int[j];
            Int[j] = temp1;
            k--;
        }
        else
        {
          pivot.begin=(Int[j].begin>pivot.begin?Int[j].begin:pivot.begin);
           pivot.end=(Int[j].end<pivot.end?Int[j].end:pivot.end);
           j++;
        }
       }
      return new int[] {i,k};
}

变量i和k的作用就是标识左区间的结束位置+1和右区间开始位置-1,返回一个{i,k}数组便于排序算法使用,下面是排序过程

public static void quickSort(Interval[] Int,int p,int r)
{
     if(p<r)
     {
          int[] q=patition(Int, p, r);
         quickSort(Int, p, q[0]-1);
         quickSort(Int, q[1]+1, r);
      }
}

算法性能简单分析:利用快速排序思想,分析每步运算期望时间复杂度为Θ(nlgn),并充分利用的区间重叠减少运行时间,当所有区间都有相同重叠部分时,这时patition过程消耗Θ(n),左右区间都为空,故不需要再作递归,整个时间复杂度满足要求。当然,对中间重叠部分可以作排序处理(比如快排每个区间的左端点值)显得更严谨,也可能是多此一举吧,不然为什么称为"模糊"排序呢?最后是Interval的定义和测试

class Interval

{
    public float begin;
    public float end;

   public Interval(float a, float b)
   {
       this.begin = a;
        this.end = b;
    }

    public static void main(String[] args)
   {
     Interval[] b = { new Interval(1, 2), new Interval(0.5f, 1), new Interval(3, 4),

                         new Interval(7.5f, 8.0f), new Interval(5, 8), new Interval(3, 4.5f) };

     quickSort(b, 0, 5);
   }
}

文章出处:http://hi.baidu.com/pink629/blog/item/0550f302f908418ed53f7c66.html

TortoiseSVN的安装与使用 TortoiseSVN的安装与应用1、安装1.1、下载TortoiseSVN    点击下载TortoiseSvn1.2、下载汉化包。上面的页面中,找到Chinese, simplified汉化包,点击32位或者64位的Setup,下载汉化包。1.3、安装TortoiseSVN。在选择安装路径页面时要记得勾选“command line client tools”,默认不是勾选的。这里不勾选的话在I... 阅读详情

相关推荐

【雷达图】R语言绘制雷达图(ggradar),NBA季后赛数据为例

一起用R语言给nba球星画球技雷达图吧!

池塘春草梦的博客 6252

【算法导论笔记】模糊排序7-6

为什么要单独拿出来记录呢,前面不是已经更新了一篇关于排序的文章了么。其实是因为在这里我浪费了很多很多时间,最近智商有点拙计,把这个独成文以引起自己现在状态的正视。 7-6、考虑这样的一种排序问题,即无法准确地知道待排序的各个数字到底是多少。对于其中的每个数字,我们只知道它落在实轴上的某个区间内。亦即,给定的是n个形如[a(i), b(i)]的闭区间(这里小括后起下标的作用,后同),其中a

所学、所思、所悟——coderling 1408

ArcGIS基础:点要素分割线要素和提取线要素的交点

第一个实验:【点要素分割线要素】看下原始数据:下图所示,2个红点和一条绿线,用2个点去分割这条线。 找到【数据管理工具】,在找到【要素】,再找到【在点处分割线】,如下图所示。 输入线、点要素,然后在【搜索半径】里输入5米,查看一下结果。 查看结果发现,线段被分割了2段,我们查看一下原因。 发现第2个点与线有一段距离,肯定是大于5米的,所以分割没有成功。可以量测一下距离,重新输入搜索半径。 我们把搜索半径改为200米,勘察结果,被点分割了3段。 接下来使用另外一个工具【在折点处分割线】,如下所示。

yuanYW7556的博客 1万+

区间模糊排序

问题描述     考虑这样的一种排序问题,即无法准确地知道待排序的各个数字到底是多少。对于其中的每个数字,我们只知道它落在实轴上的某个区间内。亦即,给定的是n个形如[a(i), b(i)]的闭区间(这里小括后起下标的作用,后同),其中a(i) ,使得存在一个c(j)属于区间[a(i(j)), b(i(j))],满足c(1) a) 为n个区间的模糊排序设计一个算法。你的算法应该具有算法的

yysdsyl的专栏 1823

SillyTavern角色卡制作全攻略:如何用AI还原你喜欢的虚构角色(附三叶完整角色卡JSON)

本文详细介绍了如何使用SillyTavern制作高质量AI角色卡,以《你的名字》中的宫水三叶为例,从角色特征提取、对话风格捕捉到JSON结构优化,全面解析AI角色扮演的创作技巧。通过具体的写作示例和完整角色卡JSON,帮助二次元爱好者和同人创作者实现虚构角色的精准还原与生动互动。

pandas7gardener的博客 2122

C语言手写HTTPD网站服务器

零基础手写C语言http网站服务器,快速入门C/C++后端开发、服务器开发。

程序员Rock的博客 1万+

老生常谈JS数组去重

数组去重,历史悠久的话题了,不过今天只记录个人比较喜欢的方法 1、数组去重需求 项目需要对类似这种数组去重: let lists = [{ id: 1, name: '法外狂徒', age: 20 }, { id: 3, name: '张三', age: 20 }, { id: 1, name: '法外狂徒', age: 20 }, { id: 4, name: '李四', age: 20 }] 该数据以id作为唯一标识,去重时只需去除重复id的那一项即.

进无止进 777

墨刀原型设计工具操作使用指南及实践操作

该指南通过异常场景处理、像素级参数说明、复杂交互示例,覆盖了墨刀操作的全细节,适合从新手到资深用户的进阶学习。结合 PlantUML 思维导图的层级化展示,可快速定位具体功能的操作要点与问题解决方法,真正实现 “照指南即可操作” 的实用价值。

hy行者勇哥的博客 4943

MySql(3)——模糊查询、排序、数据处理函数、分组函数

模糊查询 使用like 称为模糊查询,也是条件查询的一种,支持%或下划线匹配:(%是一个特殊的符号,_ 也是一个特殊符号) % :匹配任意多个字符 _:任意一个字符。 例如:找出名字中含有O的? mysql> select ename from emp where ename like '%O%'; +-------+ | ename | +-------+ | JONES | | SCOTT | | FORD | +-------+ 找出名字以T结尾的? select

qq_44824574的博客 1250

华为云HCS解决方案笔记HUAWEI CLOUD Stack【面试篇】

华为云解决方案介绍、华为云服务介绍,华为云网络平面规划等

weixin_48375618的博客 1万+

2024年数字IC秋招-华为机试-数字芯片-实习笔试题

笔试题目:40个选择题A.综合时不同文件列表内的宏定义仅在本列表生效B.宏定义会覆盖,不需要单独undefC.仿真时出现宏定义冲突以最后一次值为准D.宏定义最好在各文件中随用随定义A.4/9B.4/6C.01D.0/6。

qq_42135020的博客 2891

区间 模糊排序

本文介绍对区间的模糊排序算法的实现,对应于《算法导论》(第二版)P164,思考题7-6。

刘阳龙Herman的专栏 1137

IEC 61850标准协议解读 3.MMS服务

摘要:本文系统介绍了MMS(制造报文规范)的基础知识及其在IEC61850中的应用。首先解析MMS的核心定义、通信流程(带确认/不带确认服务)、虚拟制造设备(VMD)概念及核心对象(域/有名变量等)。重点阐述IEC61850与MMS的映射关系,包括对象分层映射、服务转换规则及数据类型对应。深入分析ASN.1编解码机制,说明MMS PDU的分层结构与解码流程。最后通过典型报文案例(报告服务、控制服务、文件传输等)和通信初始化流程,展示MMS在智能变电站中的实际应用。全文揭示了MMS作为抽象应用层协议如何通过标

张二狗的博客 724

第七章快速排序之“区间模糊排序FUZZY-SORT”(待改进。。。)

快速排序可以看成区间大小为1的模糊排序。 #include #include #define BUFFER_SIZE 10 typedef struct { int start; int end; }Node; int FuzzyPartition(Node *a,int p,int r) { Node tmp; int i=0; int j=0; int k=0; N

1294

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Dism++ 使用指南:免费开源的 Windows 系统瘦身、备份与更新管理工具

| 许可证 | MIT License(见 [LICENSE](https://link.gitcode.com/i/a750c15832bb54978fb229c456ee50ce)) | | 平台 | Windows Vista / 7 / 8 / 8.1 / 10 / 11,支持 x86 / x64 / ARM64 | | 核心能力 | 空间回收、系统备份与还原、Windows 更新管理、W

gitblog_00502的博客 236

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

fuzzy.js实战教程:在React/Vue项目中集成模糊搜索功能的完整指南

fuzzy.js是一个轻量级、高效的模糊搜索库,能够为你的Web应用提供类似Sublime Text的智能搜索体验。这个1KB大小的库既能在Node.js环境中运行,也完全兼容浏览器环境,是前端开发者实现模糊搜索功能的最佳选择。 ## 🚀 为什么选择fuzzy.js? **fuzzy.js模糊搜索**库具有以下核心优势: - **超轻量级**:仅1KB大小,不会增加项目体积负担 - **零

gitblog_00124的博客 689

性能优化与故障排查:Qwen2.5-Coder-1.5B-Instruct_rai_1.8.0_hybrid本地部署常见问题解决方案完整清单

Qwen2.5-Coder-1.5B-Instruct_rai_1.8.0_hybrid 是 AMD 官方针对 Ryzen AI 平台优化的 1.5B 参数量化 ONNX 模型,支持 NPU+GPU 混合推理。本文提供其本地部署时的性能优化要点与 5 大常见故障的完整解决方案,帮助你快速跑通并调优。 --- ## 📦 先认清模型构成:这是什么样的"包" 与常见的 PyTorch 权重包不同

gitblog_00859的博客 941

nom 模糊过滤器源码详解:fuzzy 匹配与正则提取器的实现原理

nom 是一款运行在终端里的 RSS 阅读器,按 `/` 就能在成千上万篇文章中快速筛选。它背后是一套精巧的过滤引擎:**正则提取器**负责解析 `feed:`、`tag:` 等限定符,**fuzzy 模糊匹配**负责标题搜索。本文带你完整读懂 nom 模糊过滤器源码,搞透 fuzzy 匹配与正则提取器的实现原理。 [![nom 终端 RSS 阅读器模糊过滤器使用演示](https://raw.

gitblog_00450的博客 456

lazygit 模糊搜索实战:基于 sahilm/fuzzy 库的文件过滤与实现剖析

本文围绕 lazygit 仓库中 vendored 的依赖库 [sahilm/fuzzy 的 README](https://link.gitcode.com/i/f8f86e5490e0584082e0d6e34d1bad1d) 展开,讲解这个"Sublime Text 风格"模糊字符串匹配库的核心特性、评分算法与 API 用法,并结合 lazygit 源码说明它如何支撑列表过滤(Files、分

gitblog_00497的博客 196

用Python的fuzzy、wuzzy模块进行字符串模糊匹配

Python提供fuzzywuzzy模块,不仅可用于计算两个字符串之间的相似度,而且还提供排序接口能从大量候选集中找到最相似的句子。  (1)安装  pip install fuzzywuzzy  (2)接口说明  两个模块:fuzz, process,fuzz主要用于两字符串之间匹配,process主要用于搜索排序。  fuzz.ratio(s1,s2)直接计算...

weixin_34268610的博客 5045

TanStack Solid Table 模糊筛选(Fuzzy Filtering)实战指南:基于 match-sorter 的近似匹配与排序实现

模糊筛选(Fuzzy Filtering)允许表格根据「近似匹配」而非「精确匹配」来过滤数据,是构建搜索体验友好的数据表格时最常用的能力之一。本文基于 TanStack Table 的 Solid 适配层 `@tanstack/solid-table` 官方指南 [docs/framework/solid/guide/fuzzy-filtering.md](https://link.gitcode

gitblog_00963的博客 379

为什么3个理由让Fuzzy成为你的前端搜索利器?

还在为用户的拼写错误而烦恼吗?还在为搜索功能不够智能而头疼吗?今天我要给你推荐一个只有1KB大小的JavaScript模糊搜索库——Fuzzy,它能让你告别传统的精确匹配,拥抱智能搜索体验。 ## 痛点一:用户总是记不住完整名称 想象一下这个场景:你的应用有一个包含数百个迪士尼角色的搜索功能。用户想找"狮子王里的辛巴",但他可能只记得"辛巴"或者"狮子王",甚至拼写错误为"simba"、"si

gitblog_00349的博客 652

Fuzzy:如何在JavaScript项目中实现Sublime Text级别的智能搜索体验

你是否曾经在大型数据列表中费力地寻找特定条目?或者为你的应用搜索功能不够"智能"而烦恼?传统的精确匹配搜索在面对用户拼写错误、记忆模糊或快速输入时往往显得力不从心。这正是Fuzzy库要解决的痛点——一个仅1KB大小的JavaScript库,却能为你带来Sublime Text级别的智能模糊搜索体验。 ## 问题:传统搜索的局限性 在开发Web应用时,我们经常需要实现搜索功能。传统的搜索方法通常

gitblog_00889的博客 415

FuzzyWuzzy:Python中的模糊字符串匹配

什么是模糊字符串匹配? 模糊字符串匹配是大致(而不是精确地)查找与给定模糊匹配的字符串的过程,就像字面意思一样,它也被称为近似字符串匹配。通常,这些字符串普哦诶的模式另一个字符串。 使用Levenshtein Distance计算两个字符串之间的接近程度,也称为编辑距离,其基本上是基于将一个字符串转换为另一个字符串的精确匹配所需要的基本操作的计数。 Fuzzy(模糊)字符串匹配像一个老板。它...

zcr1024的博客 3万+

Python模糊字符串匹配终极指南:Fuzzywuzzy的token_sort_ratio深度应用

在数据处理和文本分析的日常工作中,你是否经常遇到这样的困扰:用户输入"Apple Macbook Pro",数据库中存储的是"MacBook Pro 15-inch"?传统的精确匹配完全失效,而**Fuzzywuzzy**这个强大的Python模糊字符串匹配库,正是解决这类问题的终极利器!🎯 ## 什么是Fuzzywuzzy? Fuzzywuzzy是一个基于Levenshtein距离的Pyt

gitblog_00092的博客 1151
上一篇: 如何在管理不规范的公司中生存
下一篇: 区间模糊排序
jackfirst86
博客等级 码龄18年 28粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值