查找

二叉查找树

你。 提交于 2020-12-17 05:22:10
二叉查找树:Binary Search Tree 对于二叉树的任何一个节点K,左子树的任意一个节点都小于K,右子树的任意一个节点都大于或等于K,按照中序周游将各个节点打印出来会得到由小到大的排列。 节点定义的接口 /** ADT for binary tree nodes */ public interface BinNode<E> { /** Get and set the element value */ public E element(); public void setElement(E v); /** @return The left child */ public BinNode<E> left(); /** @return The right child */ public BinNode<E> right(); /** @return True if a leaf node, false otherwise */ public boolean isLeaf(); } 二叉树的节点定义,实现了上述接口 /** * Binary tree node implementation: Pointers to children * * @param E * The data element * @param Key * The associated key for the

"二分查找(Binary Search)"与"斐波那契查找(Fibonacci Search)"

╄→гoц情女王★ 提交于 2020-03-01 06:50:35
首先,我们来看一个笔者的拙作,一段二分查找代码 //返回值是key的下标,如果A中不存在key则返回-1 template <class T> int BinSearch(T* A, const T &key, int lo, int hi) { int mid; while(lo<hi) { mid = lo + (hi-lo)/2; if(key < A[mid]) hi = mid-1; else if(key > A[mid]) lo = mid+1; else return mid; if(lo==hi && A[lo]==key) return lo; } return -1; } 可以证明,算法的时间复杂度为O(nlogn),考虑前面的系数的话,大致是O(1.5nlogn)。 但是,这一实现仍有改进的余地。注意到循环 只需要1次 判断来决定是否转进到左侧,但需要2次判断来决定是否转进到右侧。也就是进入左、右分支前的关键码比较次数不等。 而斐波那契查找正是优化了这点。利用斐波那契数来对传入的数组进行黄金分割,这样前半部分较多而后半部分较少。另外,进入前半部分继续搜索所需的判断只有一次,而进入后半部分继续搜索所需的判断却有两次。如此而来,我们人为造成的这种不平衡,反倒是助长了搜索成本的平衡。 template <class T> int FibSearch(T* A,

【JAVA】找出文本中指定规律的字符,并替换其中某些字符

心不动则不痛 提交于 2020-02-29 20:57:02
##这代码有什么用? 我能帮您从一个文本文件中找出所有 指定规律的字符,并且还能替换结果中的某个指定字符,最后再打印出来。 这里的“规律”是指 匹配正则表达式。 ##怎么实现的? 文本文件的读取是通过BufferedReader和FileReader来实现: BufferedReader br = new BufferedReader(new FileReader("E:/kk.txt")); String s = null; while((s = br.readLine()) != null) { System.out.println(s); } 找出指定规律的字符是通过Pattern和Matcher来实现的,它们的作用是实现正则表达式: while((s = br.readLine()) != null) { Pattern p = Pattern.compile("\\d+[.]?\\d+M");//匹配模式 Matcher m = p.matcher(s);//s为被匹配的字符串,该方法参数类型为CharSequence,它是String的父类 if(m.find()){//Matcher.find为是否匹配成功;Matcher.group()为返回匹配到的结果 System.out.println(m.group().replaceAll("M", "+")); } }