当前位置: 首页 > news >正文

唐山房地产网站建设奥美广告公司简介

唐山房地产网站建设,奥美广告公司简介,长春住房和城乡建设部官方网站,wordpress小程序调用编程工作偶尔会遇到一些不常见问题需要处理#xff0c;学编程处理问题也难免需要熟悉一些算法以前学习的时候就遇到过一个看似简单的排序算法问题#xff0c;当时的解决办法是我没有用过的#xff0c;在此记录一下问题 - 英文字符串排序如下几个英文单词或者字母apple#…编程工作偶尔会遇到一些不常见问题需要处理学编程处理问题也难免需要熟悉一些算法以前学习的时候就遇到过一个看似简单的排序算法问题当时的解决办法是我没有用过的在此记录一下问题 - 英文字符串排序如下几个英文单词或者字母applecar afamilyskyapplicationappbabybackbackgroundbadbbbbbbeecafe cakecare排序后的结果是/**aappappleapplicationbabybackbackgroundbadbbbbbbeecafecakecarcarefamilysky**/规则逻辑通过结果可知a 与 app a排前面 (开头字母相同短的排在前面)back 与 backgroud back排在前面 (开头字母相同短的排在前面)application 与 baby application 排在前面(开头字母不同从a-z依次排序)设计实现a1 b2 c3 d4 e5 f6 g7 h8 i9 j10k11 l12 m13 n14 o15 p16 q17 r18 s19 t20u21 v22 w23 x24 y25 z26a代表的是 1b代表的是 2z 代表 26 就可以实现初步排序但是 bbbbb与 bee 两个单词要实现 bee 在前逻辑该怎么写呢起初想法是字母依次比较bbbbb 与 bee比较的第二个字母的时候 b 与 e 分别代表 2 和 5 所以bbbbb排前面问题是一个一个字母比较看起来很麻烦10个单词10个都要比较有以下解决方案都有用到递归方法一 通过单词获取权重进行排序(当初使用方法)​bbbbb b 2 b2 b2 b2 b2​bee b 2 e 5 e 5权重数 PxPx(bbbbb) 2 2 * 27^-1 2 * 27^-2 2 * 27^-3 2 * 27^-4 2.079Px(bee) 2 5 * 27^-1 5 * 27^-2 2.192通过这个计算方式可以获得权重值Px(bbbbb) Px(bee)所以 bbbbb 排在 baby 前面权重数27这里为什么是 27 不是26 是考虑到一种情况会导致排序失败比如 az 与 b比较Px(az) 1 26 * 26^-1 2Px(b) 2Px(az) Px(b) 显然是错的 将26 改为 27 就可避免这个错误优点不管是任何单词一千个也好得出每个字符串对应的权重值就能做到排序代码实现更新与2020-01-09后面做了优化区分字母大小写权重改为53public static void main(String[] args) {String[] noP {Baby,apple, car, A, family, B,b, Sky, application, app, baby, back, background,bad, bbbbb, bee, cafe, cake, care };String[] nopTop sortByWeights(noP);for (String string : nopTop) {System.out.print(string ,);}System.out.println();System.out.println(----------------------);for (String string : nopTop) {System.out.println(weights:\t getStrWeights(string,0) \t string);}}/*** for 权重排序**/public static String[] sortByWeights(String[] disorder) {double[] weightsArr new double[disorder.length];HashMap recordMap new HashMap();// 计算每个字符串的权重值for (int i0; iweightsArr[i] getStrWeights(disorder[i],0);recordMap.put(weightsArr[i],i);//保存权重值对应的字符串所在数组位置}// 将获取的权重值排序Arrays.sort(weightsArr);String[] sorderStr new String[disorder.length];int orderIndex 0;for (int i0; i// 拿出排好序的索引orderIndex recordMap.get(weightsArr[i]);sorderStr[i] disorder[orderIndex];}return sorderStr;}// 权重数值private final static double weightsNum 53;/*** for 计算字符串的权重值算法* param deep* param str* return weights*/public static double getStrWeights(String str,int deep) {int c str.charAt(deep);boolean isUppercase true;if(c 97) {c c - 32;isUppercase false;}c c - 64; // A,a - 1; B,b - 2int molecular c*2;if(isUppercase) molecular--; //if(B) - 3;if(b) - 4; for end [Baby,baby]// 这里考虑了大小写 如果字母是B 权重3/53 小写b 权重4/53 使小大小写也能排序double weights molecular/ (Math.pow(weightsNum, deep));return deep str.length() ? weights : weights getStrWeights(str,deep); //递归到字符串末尾}运行main方法控制台输出结果A,app,apple,application,B,Baby,b,baby,back,background,bad,bbbbb,bee,cafe,cake,car,care,family,Sky,----------------------weights:1.0Aweights:2.6151655393378426appweights:2.615328013590046appleweights:2.615329041941876applicationweights:3.0Bweights:3.0394956910738395Babyweights:4.0bweights:4.0394956910738395babyweights:4.040019613506452backweights:4.0400214752701284backgroundweights:4.0405838376646495badweights:4.076923067174232bbbbbweights:4.192239231043076beeweights:6.042075001511314cafeweights:6.045634987271372cakeweights:6.050551797792809carweights:6.050618967335452careweights:12.047115878410484familyweights:37.43289426842293Sky缺点考虑到前一种算法的计算如果单词长度超过20或者更长会导致计算量很大的问题如果有一百个单词比较计算很有必要如果只有两个单词bbbbbbbbbbbbbbbb 与 bar 比较 用权重法不合适因为只有两个单词没比较计算这么多就能得出排序结论下面就讲讲另一种排序算法方法二 逐个字母计算排序下面说一下新思路逐个比较applecar afamilyskyapplicationappbabybackbackgroundbadbbbbbbeecafe cakecare还是上面的单词首先获取每个字符串的第一个字母第一个字母为 a 的 全部取出apple a application app比较他们的第二个字母 a 没有第二个字母自然排在最前面依次类推使用递归即可完成排序因为临时想到的一种排序方法用到了TreeSet HashMap ArrayList 工具类感觉还可以后期优化。代码如下package javabasis.algorithm;import java.util.ArrayList;import java.util.List;import java.util.Set;import java.util.TreeMap;/*** 字段排序算法** author Narule**/public class StringAlgorithm {/*** 逐个字母比较排序** param disorder* return orderly*/public static String[] nopTop(String[] disorder) {int index 0;int end disorder.length;String[] orderly new String[end]; // 新建排序后的数组TreeMap treeMap new TreeMap(); // 排序工具类key是按照大小排序的List list null;// 收集字符串首字母信息for (String str : disorder) {char cTag str.charAt(0);list treeMap.get(cTag);if (list null) {list new ArrayList(1);}list.add(str);treeMap.put(cTag, list);}// 通过收集的首字母信息给字符串排序Set keySet treeMap.keySet();for (char cTag : keySet) {list treeMap.get(cTag);if (list ! null list.size() 0) {if (list.size() 2) { // 如果只有一个字符串不需要递归for (String string : list) {orderly[index] string;index;}} else { // 如果有两个以上字符串开头字母相同可能需要递归排序ArrayList arrayList new ArrayList(0);for (String string : list) {if (string.length() 1) { // 字符串长度大于2的需要添加到list,准备下一次递归排序用到arrayList.add(string.substring(1));} else {orderly[index] string;index;}}if (arrayList.size() 1) {String[] array new String[arrayList.size()];int i 0;for (String string : arrayList) {array[i] string;i;}array nopTop(array); // 还需要递归排序 back background - ack ackgroundfor (String string : array) {orderly[index] cTag string;index;}} else if (arrayList.size() 1) {orderly[index] cTag arrayList.get(0);index;}}}}treeMap.clear();return orderly; // 排序后的字符串数组}public static void main(String[] args) {String[] noP { apple, car, a, family, sky, application, app, baby, back, background,bad, bbbbb, bee, cafe, cake, care };String[] nopTop nopTop(noP);for (String string : nopTop) {System.out.println(string);}}}此方法用到TreeMap,这是Java工具类自带排序效果对此有疑问可以查看java源代码或介绍文档优点没有很大的计算量缺点使用TreeMap ArrayList 对象递归过多也会出现内存损耗过大或者溢出的情况未完后期待优化
http://www.zqtcl.cn/news/703163/

相关文章:

  • 怎样建立网站目录结构网站 项目方案
  • jsp做网站还响应式科技公司网站模板
  • 杭州网站建设设计公司做阀门网站
  • 用模板建站青岛企业网站制作公司
  • 网站建设经费预算表辽宁工程建设招标网
  • sql数据库查询网站模板谷歌浏览器网页版入口
  • 成都h5建站市场监督管理局举报电话
  • 百度推广弄个网站头像要钱吗?最新新闻热点素材
  • 江苏做网站找谁wordpress主题设置插件
  • 郑州微信网站开发建筑网招工平台
  • 给网站挂黑链普工招聘最新招聘信息
  • 重庆推广网站排名价格上海房产信息网官网
  • 深圳网站公司制作网络公司排名
  • 郑州高端做网站网页制作与网站建设实战大全光盘
  • 科技网站制作公司免费模板建站网站
  • 网页排版精美的中文网站单页设计软件
  • 图书馆网站建设情况会员卡管理系统价格
  • 网站建设的通知沈阳品牌设计公司
  • html5网站框架宝安网站建设深圳信科
  • 做网站单页分销电商平台开发
  • 吉林网站备案南京网站开发选南京乐识好
  • 某网站建设方案纯文本网站连接
  • 怎样做网页游戏网站智通人才网东莞最新招聘信息官网
  • 中英文网站建设wordpress 旅行
  • ic商城网站建设南大资源分享wordpress
  • 永兴集团网站织梦网站模板下载
  • html怎么做网站地图柳州小程序制作公司
  • 微网站自助建站京东自营入驻流程及费用
  • 哪些网站适合用自适应开发板编程软件
  • 网站建设公司领导致辞传奇网页游戏大全