Python中的ID分配器实现

时间:2018-03-22 02:42:41

标签: python python-3.x algorithm time-complexity

在我最近的一次采访中,我被要求实施ID分配器。

问题在于:

实现一个id分配器类,可以从0~size-1范围分配id。这个课有两种方法:

  1. alloc() - 分配一个未被使用的id,返回它。
  2. release(id) - 接收正在使用的id,并使其可以分配。
  3. 后续要求基本上是维护一个位数组以节省空间,但是这两种方法的运行时间必须优于线性。我坚持跟进,你们有什么想法吗?

    connections

1 个答案:

答案 0 :(得分:0)

如果您不必按顺序使用您的ID,则可以通过保留一组免费ID和一组使用过的ID来在固定时间内执行此操作。

<%@page import="java.sql.*"%>
<%!String driverName = "com.mysql.jdbc.Driver";%>
<%!String url = "jdbc:mysql://localhost:3306/sais2";%>
<%!String userid = "root";%>
<%!String password = "";%>
<%
	String id = request.getParameter("id");
	String fname = request.getParameter("fname");
	String lname = request.getParameter("lname");
	String email = request.getParameter("email");
	if(id != null){
		Connection con = null;
		PreparedStatement ps = null;
		int personID = Integer.parseInt(id);
		try{
			Class.forName(driverName);
			con = DriverManager.getConnection(url, userid, password);
			String sql = "UPDATE login SET lname = ?, fname = ?, email = ? WHERE id = " + id;
			ps = con.prepareStatement(sql);
			ps.setString(1, lname);
			ps.setString(2, fname);
			ps.setString(3, email);
			int i = ps.executeUpdate();
			if(i != 0){
				out.print("Record Updated Successfully");
			    String redirectURL = "http://localhost:8080/SalesandInventory/System/profiletest.jsp";
			    response.sendRedirect(redirectURL);
			}
			else{
				out.print("There is a problem in updating Record.");
			}
		}
	catch(SQLException sql){
		request.setAttribute("error", sql);
		out.println(sql);
	}
}
%>

这不像使用class IdAllocator(): def __init__(self, size): self.free_ids = set(range(size)) self.used_ids = set() def alloc(self): try: id = self.free_ids.pop() self.used_ids.add(id) return id except KeyError: raise Exception('No id available') def release(self, id): if id in self.used_ids: self.used_ids.remove(id) self.free_ids.add(id) 那样具有内存效率,但 O(1)的时间复杂度可能超过了它。