- xgboost原理
茶尽
阅读XGBoost与BoostedTree基学习器:CART每个叶子节点上面有一个分数不够厉害,所以找一个更强的模型treeensemble对每个样本的预测结果是每棵树预测分数的和目标函数采用boosting(additivetraining)方法,每一次都加入一个新的函数。依赖每个数据点上的误差函数的一阶导数和二阶导(区别于GBDT)。树的复杂度复杂度包含了一棵树里面的叶子个数和输出分数的L2模
- 力扣 hot100 Day49
qq_51397044
Hot100leetcode算法数据结构
105.从前序与中序遍历序列构造二叉树给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。//抄的classSolution{private:unordered_mapindex;TreeNode*myBuildTree(constvector&preorder,constvector&inord
- 分类树/装袋法/随机森林算法的R语言实现
廖致君
R
原文首发于简书于[2018.06.12]本文是我自己动手用R语言写的实现分类树的代码,以及在此基础上写的袋装法(bagging)和随机森林(randomforest)的算法实现。全文的结构是:分类树基本知识predginisplitrulesplitrule_bestsplitrule_randomsplittingbuildTreepredict装袋法与随机森林基本知识baggingpredic
- vue3 el-select+el-tree实现下拉树形选择
控糖__he
vue.jsjavascript前端
主要功能:多选,移除标签,清空标签,模糊搜索,禁用,全选,清空全选清空import'element-plus/dist/index.css'import{getFileTypeTree}from'@/api/Customer/index'exportdefault{name:'App',data(){return{noticeTypeId:[],//最后获取的选择idtreeProps:{valu
- 有向数据模型(数据建模-USS)
Litlesme
数据建模-USS数据建模数据分析数据库数据仓库数据分析sql
在统一星型模式中,在构建PuppiniBridge(或简称桥接表)前,需要先分析物理数据模型(物理表间的关系),FrancescoPuppini推荐通过绘制单向的ERD(实体关系图)来分析,称这种图叫做有向数据模型(ODM,OrientedDataModel),比如:有向数据模型的模型图的结构是一个有向树(DirectedTree)。实际上在多数实际场景下其实原本的结构是有向无环图(Directe
- Unity动画导演:Animator解密
你一身傲骨怎能输
游戏引擎unity游戏引擎
文章摘要Unity动画系统核心技术解析本文深入剖析Unity动画系统的三大核心技术:一、动画混合原理数学实现:位置混合:线性插值(Lerp)旋转混合:四元数球面插值(Slerp)多动画混合:加权平均公式混合类型:过渡混合、BlendTree混合、动画层混合伪代码展示骨骼变换的混合计算二、动画事件机制功能:在指定动画帧触发预设函数应用场景:伤害判定、音效触发实现方式:AnimationClip内嵌事
- 【数据结构】: 树状数组 (Binary Indexed Trees)
ZONE画派
数据结构
树状数组(BinaryIndexedTrees)November15,2012作者:Hawstein出处:http://hawstein.com/posts/binary-indexed-trees.html声明:本文采用以下协议进行授权:自由转载-非商用-非衍生-保持署名|CreativeCommonsBY-NC-ND3.0,转载请注明作者及出处。前言本文翻译自TopCoder上的一篇文章:Bi
- 树状数组(Binary Indexed Trees)树状数组详解(转载)
u010793761
计算机以及程序语言学习
分类:数据结构树状数组树状数组(BinaryIndexedTrees)November15,2012作者:Hawstein出处:http://hawstein.com/posts/binary-indexed-trees.html声明:本文采用以下协议进行授权:自由转载-非商用-非衍生-保持署名|CreativeCommonsBY-NC-ND3.0,转载请注明作者及出处。topcoder上原英文链
- 树状数组
菜圾
树状数组杂记ACM树状数组
树状数组(BinaryIndexedTrees)November15,2012作者:Hawstein出处:http://hawstein.com/posts/binary-indexed-trees.html声明:本文采用以下协议进行授权:自由转载-非商用-非衍生-保持署名|CreativeCommonsBY-NC-ND3.0,转载请注明作者及出处。前言本文翻译自TopCoder上的一篇文章:Bi
- 【notes】【NERDtree】使用记录
过得精彩
#UbuntunotesvimNERDtree
vimNERDtree安装、配置、使用0.env1.下载、安装(1).下载(2).安装2.配置(1).配置键盘映射(2).进入vim自动打开3.个人常用操作(1).左右窗口切换光标(2).在当前窗口打开xxx且切换光标到该文件窗口(3).在当前窗口打开xxx但不切换光标到该文件窗口(4).显示系统cmdline,执行shellcmd0.envubuntu18-04vim8.01.下载、安装(1).
- 《算法导论(第4版)》阅读笔记:p91-p94
算法
《算法导论(第4版)》学习第20天,p91-p94总结,总计4页。一、技术总结1.recursiontreeIngraphtheory,arecursivetree(i.e.,unorderedtree)isalabeled,rootedtree.Asize-nrecursivetree'sverticesarelabeledbydistinctpositiveintegers1,2,…,n,wh
- Boring counting HDU - 4358(树上出现k次的数字个数)
starlet_kiss
树状数组
InthisproblemweconsiderarootedtreewithNvertices.Theverticesarenumberedfrom1toN,andvertex1representstheroot.Thereareintegerweightsoneachvectice.Yourtaskistoansweralistofqueries,foreachquery,pleasetellu
- C++八股——平衡树总结
四谷夕雨
c++
文章目录1.定义2.各种平衡树2.1AVL树2.2红黑树(Red-BlackTree)2.3B树(B-Tree)2.4B+树(B+Tree)2.5伸展树(SplayTree)2.6Treap2.7替罪羊树(ScapegoatTree)2.82-3树/2-3-4树2.9AA树(AA-Tree)2.10加权平衡树(Weight-BalancedTree)总结对比1.定义平衡树(BalancedTree
- HDU5927 Auxiliary Set(dfs)
KeyboardPianist
HDUdfshdudfs
AuxiliarySetTimeLimit:9000/4500MS(Java/Others)MemoryLimit:65536/65536K(Java/Others)TotalSubmission(s):937AcceptedSubmission(s):289ProblemDescriptionGivenarootedtreewithnvertices,someoftheverticesareim
- Auxiliary Set HDU - 5927(思维题)
coldfresh
思考
Givenarootedtreewithnvertices,someoftheverticesareimportant.Anauxiliarysetisasetcontainingverticessatisfyingatleastoneofthetwoconditions:∙Itisanimportantvertex∙Itistheleastcommonancestoroftwodifferent
- 力扣-105.从前序与中序遍历序列构造二叉树
এ᭄画画的北北
力扣hot100leetcode算法数据结构
题目描述给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。classSolution{public:TreeNode*buildTree(vector&preorder,vector&inorder){if(preorder.size()==0)returnNULL;TreeNode*root=
- 堆与二叉树——C语言
黄皮の电气鼠
c语言android开发语言
一、顺序表底层#pragmaonce#include#include#includetypedefintdata;typedefstructHeap{data*arr;intsize;intcapacity;}Heap;voidHeapInit(Heap*php);voidHeapDestroy(Heap*php);//把已有堆进行排序voidtreesort(Heap*php);voidHeap
- 组织架构设计、角色与权限设计的一些思考
Java进阶八股文
状态模式
组织架构1.需求点查询某个组织下面的所有用户(包括所有下级组织)查询某个组织下面的所有下级组织查询用户所在的组织获取整个组织结构,方便生成树形数据结构2.组织表相关的必要字段如下:id,主键IDpid,父级组织idtree,当前节点的所有父级组织,假设当前组织的父级id为2,2的父级id为1,则tree的值为:1,23.用户表相关的必要字段如下:department,所在的组织id。4.相关SQL
- CloudCompare 中的 KDTree详解
点云SLAM
点云数据处理技术算法人工智能数据结构数据结构
CloudCompare中的KDTree详解1.什么是KDTree?KDTree是K维空间划分树(K-DimensionalTree),它是一种用于高效查找最近邻点的数据结构。CloudCompare中的KDTree主要用于:最近邻搜索(NearestNeighborSearch)点云匹配和ICP(IterativeClosestPoint)配准点云去噪半径范围搜索点云加速索引相比DgmOctre
- 迭代器组装树结构
bright future cheer
java
以menu为例classMenu{privateLongid;privateStringname;privateLongparentId;privateListchildren;}publicstaticListbuildTreeIteratively(Listmenus,LongrootParentId){Map>menuMap=newHashMap子节点列表的映射for(Menumenu:me
- LeetCode //C - 685. Redundant Connection II
Navigator_Z
LeetCodeleetcodec语言算法
685.RedundantConnectionIIInthisproblem,arootedtreeisadirectedgraphsuchthat,thereisexactlyonenode(theroot)forwhichallothernodesaredescendantsofthisnode,pluseverynodehasexactlyoneparent,exceptfortheroot
- PCL笔记四:k-d tree和八叉树;近邻搜索;半径搜索;体素内搜索;空间变化检测;
逍遥郎wj
PCL八叉树双缓冲八叉树PCL点云变化检测
点云数据主要是表征目标表面的海量点集合,并不具备传统实体网格数据的几何拓扑信息。点云数据处理中最为核心的问题就是建立离散点间的拓扑关系,实现基于邻域关系的快速查找。建立空间索引在点云数据处理中已被广泛应用,常见空间索引一般是自顶向下逐级划分空间的各种空间索引结构:BSP树、k-dtree、KDB树、R树、R+树、CELL树、四叉树、八叉树等。k-dtree对于区间和近邻搜索十分有用。PCL中k-d
- PTA L2-011 玩转二叉树(Python3)
取名字不好取那直接不取了
python
classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefbuildTree(qx,zx):ifnotqxornotzx:returnNoneroot_val=qx[0]root=TreeNode(root_val)zx_index=zx.index
- prism项目搭建 wpf_PRISM WPF-导航每次都会创建新视图
weixin_39588084
prism项目搭建wpf
I'musingPRISM4NavigationAPIwithUnityinWPF.Ihaveatree-viewthatinitiatesaRequestNavigatepassingintheselectedtreenode'sID(GUID)._regionManager.RequestNavigate(RegionNames.DetailRegion,ViewNames.SiteView+
- prism项目搭建 wpf,PRISM WPF-导航每次都会创建新视图
宋世泊
prism项目搭建wpf
I'musingPRISM4NavigationAPIwithUnityinWPF.Ihaveatree-viewthatinitiatesaRequestNavigatepassingintheselectedtreenode'sID(GUID)._regionManager.RequestNavigate(RegionNames.DetailRegion,ViewNames.SiteView+
- 二叉树的ACM板子(自用)
明天不下雨(牛客同名)
windows
package二叉树的中序遍历;importjava.util.*;//定义二叉树节点classTreeNode{intval;//节点值TreeNodeleft;//左子节点TreeNoderight;//右子节点//构造函数TreeNode(intx){val=x;}}publicclassDMain{//构建二叉树(层序遍历方式)publicstaticTreeNodebuildTree(I
- ASP.NET 无限级树的加载
weixin_30457551
OPW_XT_MKOP_W_XT_MK=newOPW_XT_MK(AppPublic.GetConnectionString());protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){//生成树buildTree();}}/**///////添加树形菜单的结构///privatevoidbuildTree(){OP_W_X
- squarified算法
淬渊阁
算法算法c++qt数据结构前端
其他参考资料:https://www.docin.com/p-1509919023.htmlSquarifiedTreemaps论文算法复现_squarified算法-CSDN博客手绘草图,发觉之前网上很多的图都会误导大家去理解算法前处理1首先对输入数据进行排序2对数据数据总和和窗口面积进行等比换手。算法基本思路:原始数据:{6,6,4,3,2,2,1}step1:首先确认最短边,将第一个元素6放
- 7个最好用的Vue Tree Select树形组件
萌尛喵
vue.js前端javascript
Vue树形选择器(Vuetreeselect)组件在搭建Vue的app中特别常用,Vuetreeselect除了简单的树形结构外,还有非常多样的功能来配合不同场景的使用。比如搜索过滤,前端添加删除树枝,前端编辑修改子树名,拖拽排序,对用户操作事件记录等。VueJSTree-全功能,树状单选多选,可拖拽,过滤搜索VueDraggableNestedTree-纯树形选择,轻盈趁手VueTreeList
- vue 移动端树结构功能_【H5】Vue 递归组件构建一个树形菜单
难忘念想
vue移动端树结构功能
Vue.js中的递归组件是一个可以调用自己的组件例如:递归组件一般用于博客上显示评论,树形菜单或者嵌套菜单。一、初始化我们直接使用vue提供的脚手架vue-cli来初始化我们的工程:#搭建项目vueinitwebpack-simpletree-menu#进入项目cdtree-menu#依赖安装npminstall#运行项目npmrundev现在我们的环境已经准备好了,在初始化的项目中,有一些不需要
- Enum用法
不懂事的小屁孩
enum
以前的时候知道enum,但是真心不怎么用,在实际开发中,经常会用到以下代码:
protected final static String XJ = "XJ";
protected final static String YHK = "YHK";
protected final static String PQ = "PQ";
- 【Spark九十七】RDD API之aggregateByKey
bit1129
spark
1. aggregateByKey的运行机制
/**
* Aggregate the values of each key, using given combine functions and a neutral "zero value".
* This function can return a different result type
- hive创建表是报错: Specified key was too long; max key length is 767 bytes
daizj
hive
今天在hive客户端创建表时报错,具体操作如下
hive> create table test2(id string);
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:javax.jdo.JDODataSto
- Map 与 JavaBean之间的转换
周凡杨
java自省转换反射
最近项目里需要一个工具类,它的功能是传入一个Map后可以返回一个JavaBean对象。很喜欢写这样的Java服务,首先我想到的是要通过Java 的反射去实现匿名类的方法调用,这样才可以把Map里的值set 到JavaBean里。其实这里用Java的自省会更方便,下面两个方法就是一个通过反射,一个通过自省来实现本功能。
1:JavaBean类
1 &nb
- java连接ftp下载
g21121
java
有的时候需要用到java连接ftp服务器下载,上传一些操作,下面写了一个小例子。
/** ftp服务器地址 */
private String ftpHost;
/** ftp服务器用户名 */
private String ftpName;
/** ftp服务器密码 */
private String ftpPass;
/** ftp根目录 */
private String f
- web报表工具FineReport使用中遇到的常见报错及解决办法(二)
老A不折腾
finereportweb报表java报表总结
抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己。
出现问题先搜一下文档上有没有,再看看度娘有没有,再看看论坛有没有。有报错要看日志。下面简单罗列下常见的问题,大多文档上都有提到的。
1、没有返回数据集:
在存储过程中的操作语句之前加上set nocount on 或者在数据集exec调用存储过程的前面加上这句。当S
- linux 系统cpu 内存等信息查看
墙头上一根草
cpu内存liunx
1 查看CPU
1.1 查看CPU个数
# cat /proc/cpuinfo | grep "physical id" | uniq | wc -l
2
**uniq命令:删除重复行;wc –l命令:统计行数**
1.2 查看CPU核数
# cat /proc/cpuinfo | grep "cpu cores" | u
- Spring中的AOP
aijuans
springAOP
Spring中的AOP
Written by Tony Jiang @ 2012-1-18 (转)何为AOP
AOP,面向切面编程。
在不改动代码的前提下,灵活的在现有代码的执行顺序前后,添加进新规机能。
来一个简单的Sample:
目标类:
[java]
view plain
copy
print
?
package&nb
- placeholder(HTML 5) IE 兼容插件
alxw4616
JavaScriptjquery jQuery插件
placeholder 这个属性被越来越频繁的使用.
但为做HTML 5 特性IE没能实现这东西.
以下的jQuery插件就是用来在IE上实现该属性的.
/**
* [placeholder(HTML 5) IE 实现.IE9以下通过测试.]
* v 1.0 by oTwo 2014年7月31日 11:45:29
*/
$.fn.placeholder = function
- Object类,值域,泛型等总结(适合有基础的人看)
百合不是茶
泛型的继承和通配符变量的值域Object类转换
java的作用域在编程的时候经常会遇到,而我经常会搞不清楚这个
问题,所以在家的这几天回忆一下过去不知道的每个小知识点
变量的值域;
package 基础;
/**
* 作用域的范围
*
* @author Administrator
*
*/
public class zuoyongyu {
public static vo
- JDK1.5 Condition接口
bijian1013
javathreadConditionjava多线程
Condition 将 Object 监视器方法(wait、notify和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。
条件(也称为条件队列或条件变量)为线程提供了一
- 开源中国OSC源创会记录
bijian1013
hadoopsparkMemSQL
一.Strata+Hadoop World(SHW)大会
是全世界最大的大数据大会之一。SHW大会为各种技术提供了深度交流的机会,还会看到最领先的大数据技术、最广泛的应用场景、最有趣的用例教学以及最全面的大数据行业和趋势探讨。
二.Hadoop
&nbs
- 【Java范型七】范型消除
bit1129
java
范型是Java1.5引入的语言特性,它是编译时的一个语法现象,也就是说,对于一个类,不管是范型类还是非范型类,编译得到的字节码是一样的,差别仅在于通过范型这种语法来进行编译时的类型检查,在运行时是没有范型或者类型参数这个说法的。
范型跟反射刚好相反,反射是一种运行时行为,所以编译时不能访问的变量或者方法(比如private),在运行时通过反射是可以访问的,也就是说,可见性也是一种编译时的行为,在
- 【Spark九十四】spark-sql工具的使用
bit1129
spark
spark-sql是Spark bin目录下的一个可执行脚本,它的目的是通过这个脚本执行Hive的命令,即原来通过
hive>输入的指令可以通过spark-sql>输入的指令来完成。
spark-sql可以使用内置的Hive metadata-store,也可以使用已经独立安装的Hive的metadata store
关于Hive build into Spark
- js做的各种倒计时
ronin47
js 倒计时
第一种:精确到秒的javascript倒计时代码
HTML代码:
<form name="form1">
<div align="center" align="middle"
- java-37.有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接
bylijinnan
java
public class MaxCatenate {
/*
* Q.37 有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接,
* 问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。
*/
public static void main(String[] args){
- mongoDB安装
开窍的石头
mongodb安装 基本操作
mongoDB的安装
1:mongoDB下载 https://www.mongodb.org/downloads
2:下载mongoDB下载后解压
 
- [开源项目]引擎的关键意义
comsci
开源项目
一个系统,最核心的东西就是引擎。。。。。
而要设计和制造出引擎,最关键的是要坚持。。。。。。
现在最先进的引擎技术,也是从莱特兄弟那里出现的,但是中间一直没有断过研发的
 
- 软件度量的一些方法
cuiyadll
方法
软件度量的一些方法http://cuiyingfeng.blog.51cto.com/43841/6775/在前面我们已介绍了组成软件度量的几个方面。在这里我们将先给出关于这几个方面的一个纲要介绍。在后面我们还会作进一步具体的阐述。当我们不从高层次的概念级来看软件度量及其目标的时候,我们很容易把这些活动看成是不同而且毫不相干的。我们现在希望表明他们是怎样恰如其分地嵌入我们的框架的。也就是我们度量的
- XSD中的targetNameSpace解释
darrenzhu
xmlnamespacexsdtargetnamespace
参考链接:
http://blog.csdn.net/colin1014/article/details/357694
xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace,其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找:
例如:以下xsd文件,就出现了该错误,即便是在一
- 什么是RAID0、RAID1、RAID0+1、RAID5,等磁盘阵列模式?
dcj3sjt126com
raid
RAID 1又称为Mirror或Mirroring,它的宗旨是最大限度的保证用户数据的可用性和可修复性。 RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而,Mirror的磁盘空间利用率低,存储成本高。
Mir
- yii2 restful web服务快速入门
dcj3sjt126com
PHPyii2
快速入门
Yii 提供了一整套用来简化实现 RESTful 风格的 Web Service 服务的 API。 特别是,Yii 支持以下关于 RESTful 风格的 API:
支持 Active Record 类的通用API的快速原型
涉及的响应格式(在默认情况下支持 JSON 和 XML)
支持可选输出字段的定制对象序列化
适当的格式的数据采集和验证错误
- MongoDB查询(3)——内嵌文档查询(七)
eksliang
MongoDB查询内嵌文档MongoDB查询内嵌数组
MongoDB查询内嵌文档
转载请出自出处:http://eksliang.iteye.com/blog/2177301 一、概述
有两种方法可以查询内嵌文档:查询整个文档;针对键值对进行查询。这两种方式是不同的,下面我通过例子进行分别说明。
二、查询整个文档
例如:有如下文档
db.emp.insert({
&qu
- android4.4从系统图库无法加载图片的问题
gundumw100
android
典型的使用场景就是要设置一个头像,头像需要从系统图库或者拍照获得,在android4.4之前,我用的代码没问题,但是今天使用android4.4的时候突然发现不灵了。baidu了一圈,终于解决了。
下面是解决方案:
private String[] items = new String[] { "图库","拍照" };
/* 头像名称 */
- 网页特效大全 jQuery等
ini
JavaScriptjquerycsshtml5ini
HTML5和CSS3知识和特效
asp.net ajax jquery实例
分享一个下雪的特效
jQuery倾斜的动画导航菜单
选美大赛示例 你会选谁
jQuery实现HTML5时钟
功能强大的滚动播放插件JQ-Slide
万圣节快乐!!!
向上弹出菜单jQuery插件
htm5视差动画
jquery将列表倒转顺序
推荐一个jQuery分页插件
jquery animate
- swift objc_setAssociatedObject block(version1.2 xcode6.4)
啸笑天
version
import UIKit
class LSObjectWrapper: NSObject {
let value: ((barButton: UIButton?) -> Void)?
init(value: (barButton: UIButton?) -> Void) {
self.value = value
- Aegis 默认的 Xfire 绑定方式,将 XML 映射为 POJO
MagicMa_007
javaPOJOxmlAegisxfire
Aegis 是一个默认的 Xfire 绑定方式,它将 XML 映射为 POJO, 支持代码先行的开发.你开发服 务类与 POJO,它为你生成 XML schema/wsdl
XML 和 注解映射概览
默认情况下,你的 POJO 类被是基于他们的名字与命名空间被序列化。如果
- js get max value in (json) Array
qiaolevip
每天进步一点点学习永无止境max纵观千象
// Max value in Array
var arr = [1,2,3,5,3,2];Math.max.apply(null, arr); // 5
// Max value in Jaon Array
var arr = [{"x":"8/11/2009","y":0.026572007},{"x"
- XMLhttpRequest 请求 XML,JSON ,POJO 数据
Luob.
POJOjsonAjaxxmlXMLhttpREquest
在使用XMlhttpRequest对象发送请求和响应之前,必须首先使用javaScript对象创建一个XMLHttpRquest对象。
var xmlhttp;
function getXMLHttpRequest(){
if(window.ActiveXObject){
xmlhttp:new ActiveXObject("Microsoft.XMLHTTP
- jquery
wuai
jquery
以下防止文档在完全加载之前运行Jquery代码,否则会出现试图隐藏一个不存在的元素、获得未完全加载的图像的大小 等等
$(document).ready(function(){
jquery代码;
});
<script type="text/javascript" src="c:/scripts/jquery-1.4.2.min.js&quo